如何在C#中启动UI线程

时间:2009-04-13 19:24:38

标签: c# .net multithreading user-interface

我知道我可以用.NET启动一个新的工作线程。但是如何启动新的UI线程(如在MFC中)?

我不介意解决方案是否仅限于Windows机箱;我也希望解决方案纯粹是.NET - 没有p /调用CreateThread等等。

任何意见都赞赏。

4 个答案:

答案 0 :(得分:24)

使用Application.Run - 它在当前线程中启动消息循环。有一些重载需要一个表单开始,或者一个应用程序上下文,或两者都没有。 (如果要为 new 线程执行此操作,则需要创建线程并以正常方式启动它,并使其调用Application.Run。)

答案 1 :(得分:4)

如果您对使用WPF感兴趣,请查看MSDN的文章WPF's Threading Model,特别是“多个Windows,多个线程”部分。它详细说明了创建新Dispatcher并在新线程上显示窗口时需要执行的操作。

答案 2 :(得分:2)

如果您要创建一个能够创建和处理Window句柄的新线程,则可以使用Thread对象上的SetApartmentState函数并将其设置为STA。您还可能需要在此线程的方法内调用Application.Run以创建消息循环。但是,请记住,您在任何其他线程中都遵循相同的交叉线程禁令(即,您只能与创建它的线程上的控件的句柄进行交互),所以在不切换上下文的情况下,您无法在其他UI线程上执行任何操作。

答案 3 :(得分:0)

你也可以这样做:

    delegate void MyProcHandler(object param1, object param2);

    MyForm.Invoke
    (
            new MyProcHandler(delegate(object param1, object param2) 
            {
            // some code
            }), 
            null, 
            null
    );