public static void Main()
{
Form formOnThisMessageLoop = new Form();
formOnThisMessageLoop.Show();
Form formOnOtherMessageLoop = new Form();
Task.Factory.StartNew(
() =>
{
Application.Run(formOnOtherMessageLoop);
}
);
//Thread.Sleep(50);
formOnOtherMessageLoop.HandleCreated += (obj, args) =>
formOnOtherMessageLoop.Invoke(new Action(() => { formOnOtherMessageLoop.Close(); })); //Value Close() cannot be called while doing CreateHandle().
Application.Run();
Console.Read();
}
我正在尝试各种方法来关闭第二个消息循环中的表单。在这种情况下,如何正确同步我的线程?另外,我需要两次调用Application.Exit()
还是我能做的最好的Form.Close()?我看到Application.Run()让我的死线保持活着。这是我对它的关注。假设主线程可以存活很长时间。
答案 0 :(得分:2)
Form.Close()
, Application.Run(formOnOtherMessageLoop)
将退出其他消息循环。如果您编写Application.Run()
并调用Form.Close()
,则应用程序将不会退出。
但为什么需要另一个消息循环?特别是你正在这样做的方式,因为这将消耗一个线程池线程来运行所述其他消息循环。
这几乎总是一个坏主意 - 这来自于使用多个消息循环实现的对延迟敏感的应用程序(通常很差,有很多错误)的人。