我有两种形式的应用(刚刚由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%的案例。有什么理由为什么?
答案 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();