第二次点击时没有任何事情发生

时间:2017-08-21 07:25:08

标签: c# wpf sta

当我第二次执行相同的方法时,我很可怕。我没有获得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();)浏览器屏幕没有显示

注意:我注意到如果我没有关闭第一个窗口(实例)那么我可以打开许多资源管理器屏幕。使用相同的代码。 如果我关闭第一个窗口(实例),我无法打开资源管理器屏幕,我没有收到任何错误消息。

1 个答案:

答案 0 :(得分:1)

问题已解决在TestClass构造函数中添加以下行

using SW = System.Windows;

private TestClass()
{
    if (SW.Application.Current == null)
    {
        new SW.Application
        {
            ShutdownMode = SW.ShutdownMode.OnExplicitShutdown
        };
    }
}