当尝试使用The calling thread must be STA, because many UI components require this.
创建WPF用户控件时,WinForm背后的代码与myWpfUserControl = new MyWpfUserControl();
崩溃。它似乎在基本用户控件构造函数中崩溃。
我的应用程序的入口点是ApplicationStartup
App.xaml.cs
,其上有[STAThread]
。我根本没有使用线程,我可以在Visual Studio中的“线程”窗格中看到它崩溃时它位于Main Thread
上。
编辑:它曾经工作过。
这是我的代码的骨架:
[STAThread]
private void ApplicationStartup(object sender, StartupEventArgs e)
{
LogonFormEventListener listener = new LogonFormEventListener();
Logon.LogonFormEvent += new Logon.ClassFormEventHandler(listener.TestEventRaised);
Logon logon = new Logon();
logon.ShowDialog();
}
public partial class Logon : Form
{
private void OKbutton_Click(object sender, EventArgs e)
{
if(LogonFormEvent !=null) LogonFormEvent(this, null);
}
}
public class LogonFormEventListener
{
public void TestEventRaised(Logon o, EventArgs e)
{
MainForm mainForm = new MainForm();
mainForm.ShowDialog();
}
}
public partial class MainForm : Form
{
MyWpfUserControl myWpfUserControl;
private void mainMenu_ItemClick(object sender, MenuBar.ItemEventArgs e)
{
switch (e.Item.Key)
{
case "myAction":
myWpfUserControl = new MyWpfUserControl(); //CRASH
...
break;
}
}
}
在我的用户控件中的任何代码运行之前,用户控件在基础构造函数中崩溃,因此没有任何一点显示用户控件代码(我认为)。
任何想法都会受到赞赏。
答案 0 :(得分:0)
只是一个猜测,但它可能是你的TestEventRaised上的ShowDialog()吗?
System.Windows.Application.Current.Dispatcher.Invoke((Action)(() => { mainForm.ShowDialog(); }));
出于某种原因可能会被解雇。
如果没有,你可以尝试将它包装在[STAThread]函数之外的其他构造函数上的ShowDialog()调用中,如果有的话那么。