本文主要介绍如何在C# Console项目中,调用WPF DLL,并进行窗口的显示。
由于,C# Console项目为非UI线程,因此调用WPF DLL窗口显示方法时,会报错。
线程模式分为STA(Single Threaded Apartment) 单线程单元 和 MTA 多线程单元(Multi-Threaded Apartment)。任何一个WPF程序,Main方法前必须有一个[STAThread]特性,否则编译会失败。这个特性用来申明该应用程序的初始线程模型为STA,以便和COM兼容。STA是.NET之前,旧的COM年代的词汇。
因此需要将线程设置为STA模式。
Thread td = new Thread(()=> {
frmLog fm = new frmLog();
fm.ShowDialog();
});
// 将当前线程设置为单个线程单元(STA)模式方可进行 OLE 调用。
td.TrySetApartmentState(ApartmentState.STA);<<~~~~~~~~~~~~~~~~~~~~加上这句话就可以解决问题了
// 设置为后台线程
td.IsBackground = true;
// 开启线程
td.Start();