在Windows 10环境中多次调用Application.Run的奇怪行为

时间:2015-09-25 13:58:00

标签: c# winforms windows-10

我有两种形式的应用(刚刚由AddNewForm创建)

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
        Application.Run(new Form2());
    }

当Form1在右上角被红色十字关闭时,Form2会按预期显示。

当Form1被上下文菜单关闭时,#34;关闭&#34;任务栏中的表单图标上显示,应用程序几乎立即终止。如果下面没有显示Form2,则会处理其Load事件处理程序,但不会调用其FormClosed事件处理程序。

我仅在Windows 10上观察到此行为(无法在Windows 7上模拟) 80%的案例。有什么理由为什么?

1 个答案:

答案 0 :(得分:0)

如果我用新的 FormXX()替换 Application.Run(new FormXX())。ShowDialog()应用程序开始按预期运行。因此, Application.Run 中存在一些与在一个线程中多次调用此方法相关的问题。

我当前的解决方案基于每个线程只运行一次Application.Run()。以下代码永远不会立即关闭Form2:

Thread thread1 = new Thread(() =>
{
    Application.Run(new Form1());
});
thread1.SetApartmentState(ApartmentState.STA);
thread1.Start();
thread1.Join();

Thread thread2 = new Thread(() =>
{
    Application.Run(new Form2());
});
thread2.SetApartmentState(ApartmentState.STA);
thread2.Start();
thread2.Join();