一、生成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();
}
}
}