0
    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() 使我的死线程保持活力。这是我的担心。假设主线程可以存活很长时间。

4

1 回答 1

2

Form.Close()只要将表单作为参数传递给Application.Run(formOnOtherMessageLoop)您,就会退出该其他消息循环。相反,如果您编写Application.Run()并调用Form.Close()应用程序将不会退出。

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

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

于 2012-10-18T23:30:15.503 回答