【发布时间】:2016-01-05 22:36:00
【问题描述】:
在尝试使用myWpfUserControl = new MyWpfUserControl(); 创建 WPF 用户控件时,WinForm 背后的代码因The calling thread must be STA, because many UI components require this. 而崩溃。它似乎在基本用户控件构造函数中崩溃了。
我的应用程序的入口点是ApplicationStartup in 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;
}
}
}
在我的用户控件中的任何代码运行之前,用户控件在基本构造函数中崩溃,因此显示用户控件代码没有意义(我认为)。
任何想法都将不胜感激。
【问题讨论】:
-
你需要添加一些代码来诊断。
-
可能与this问题有关。
-
@Nikita 什么代码会有帮助?
-
添加你的类/用户控件和主方法。
-
等等,您正在“WinForm”后面的代码中创建一个 WPF UserControl,并且启动位于 app.xaml.cs (WPF) 中?我对你使用什么技术以及你想要完成什么感到非常困惑。