当我第二次执行相同的方法时,我很可怕。我没有获得WPF屏幕,我不知道为什么? 参考我的代码
TestWindow按钮单击方法(它是Windows应用程序项目类型),我已经删除了我的
中的STA线程主要()
TestClass test;
private void button1_Click(object sender, EventArgs e)
{
test =TestClass.Instance; //singleton pattern
test.ShowScreen();
}
TestClass
public void ShowScreen()
{
var thread = new Thread(() =>
{
Explorer explorer = new Explorer();
explorer.Show();
explorer.Closed += (s, args) =>
explorer.Dispatcher.InvokeShutdown();
System.Windows.Threading.Dispatcher.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
当我第一次运行时,代码正常工作正常。我可以查看我的资源管理器屏幕。 但问题是当我关闭第一个屏幕并再次调用相同的方法(test.ShowScreen();)浏览器屏幕没有显示
注意:我注意到如果我没有关闭第一个窗口(实例)那么我可以打开许多资源管理器屏幕。使用相同的代码。 如果我关闭第一个窗口(实例),我无法打开资源管理器屏幕,我没有收到任何错误消息。
答案 0 :(得分:1)
问题已解决在TestClass构造函数中添加以下行
using SW = System.Windows;
private TestClass()
{
if (SW.Application.Current == null)
{
new SW.Application
{
ShutdownMode = SW.ShutdownMode.OnExplicitShutdown
};
}
}