关闭第二个Application循环的正确方法是什么?

时间:2012-10-18 23:22:02

标签: c# winforms multithreading

    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()让我的死线保持活着。这是我对它的关注。假设主线程可以存活很长时间。

1 个答案:

答案 0 :(得分:2)

只要表单作为参数传递给Form.Close()

Application.Run(formOnOtherMessageLoop)将退出其他消息循环。如果您编写Application.Run()并调用Form.Close(),则应用程序将不会退出。

但为什么需要另一个消息循环?特别是你正在这样做的方式,因为这将消耗一个线程池线程来运行所述其他消息循环。

这几乎总是一个坏主意 - 这来自于使用多个消息循环实现的对延迟敏感的应用程序(通常很差,有很多错误)的人。