WPF应用生成DLL文件以及调用方式

一、生成DLL文件

1.新建WPF应用程序项目。

2.删除App.xmal和MainWindow.xmal。

3.单机项目右键选择属性,修改输出类型为:类库。

二、DLL文件调用方式

1.把生成的DLL文件放入新项目的bin目录中,并且添加引用。

2.使用STA线程调用WPF窗体界面。

需要在主线程外新建一个STA线程来打开窗体界面。在后台线程中创建Application 的实例。

新建STA线程:

public class STAProxy
    {
        public Application App { get; set; }
        private void Invoke(object obj)
        {
            STAProxy proxy = (STAProxy)obj;
            proxy.App = new Application
            {//应用关闭时。调用Application.Shutdown()
                ShutdownMode = ShutdownMode.OnExplicitShutdown
            };
            proxy.App.Run();
        }
        public void Run()
        {
            if (Application.Current != null)
            {//因为Application 只能创建一个。如果是wpf来调用 此处的Application.Current 是不为null.
                App = Application.Current;
                return;
            }
            else
            {

                //其他语言调用时 Application.Current为null 需要sta线程去创建Application的实例
                Thread th = new Thread(new ParameterizedThreadStart(Invoke))
                {
                    IsBackground = true
                };
                th.SetApartmentState(ApartmentState.STA);
                th.Start(this);

                //等待App被初始化 此处可以用AutoResetEvent 更稳妥点(因为要等Application.Run()起来,我下面的while只能保证Application实例被创建),因为提示要实现IDisposable 我就没用了
                while (App == null) { Thread.Sleep(100); };
            }
        }
    }

调用STAProxy方法:

public class ProxyStart
    {
        private static readonly STAProxy staProxy = new STAProxy();
        static ProxyStart()
        {
            staProxy.Run();
        }

        public static void ShowWind()
        {
            staProxy.App.Dispatcher.Invoke(new Action(delegate
            {
                //Window1为原WPF程序创建的窗体界面
                Window1 window = new Window1();
                window.ShowDialog();
            }));
        }
    }

3.在新项目中调用

using PreviewDLL;

namespace previewTest
{
    class Program
    {
        static void Main(string[] args)
        {
            PreviewDLL.ProxyStart.ShowWind();
        }
    }
}


参考:WPF写的第3方dll 解决调用方报不是STA线程问题。_wpf 判断是否是sta线程-CSDN博客

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF 是一种用于构建 Windows 桌面应用程序的技术,而资源文件是存储应用程序所需数据的一种方式。在 WPF 中,可以使用资源文件来存储图片、文本、样式等应用程序所需的各种资源。 要在后台调用资源文件,需要先将资源文件添加到项目中。在 Visual Studio 中,可以通过右键点击项目 -> 添加 -> 现有项将资源文件添加到项目中。添加后,可以在项目项中看到资源文件的引用。 在代码中使用资源文件,首先需要在 XAML 文件的顶部引入资源文件的命名空间。例如,如果资源文件的命名空间是 "MyApp.Resources",则可以添加以下代码: ```xaml xmlns:res="clr-namespace:MyApp.Resources" ``` 然后,可以通过使用资源文件的键来访问资源。以下是一些示例代码: ```csharp ImageSource imageSource = (ImageSource)App.Current.Resources["MyImage"]; string text = (string)App.Current.Resources["MyText"]; ``` 上述代码将资源文件中名为 "MyImage" 和 "MyText" 的资源分别赋值给了 imageSource 和 text 变量。资源文件中的资源可以是任何类型,可以根据实际的需要进行转换。 除了全局的资源文件,还可以在局部的 XAML 文件中定义资源,然后在后台代码中通过 FindResource 方法来访问这些资源。以下是一个示例: ```xaml <Window> <Window.Resources> <SolidColorBrush x:Key="MyBrush" Color="Red"/> </Window.Resources> </Window> ``` 在后台代码中,可以使用以下代码来访问这个资源: ```csharp SolidColorBrush myBrush = (SolidColorBrush)FindResource("MyBrush"); ``` 以上就是在 WPF 中后台调用资源文件的方法。通过合理使用资源文件,可以方便地管理和使用应用程序所需的各种资源,提高代码的可维护性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值