我知道我可以用.NET启动一个新的工作线程。但是如何启动新的UI线程(如在MFC中)?
我不介意解决方案是否仅限于Windows机箱;我也希望解决方案纯粹是.NET - 没有p /调用CreateThread等等。
任何意见都赞赏。
答案 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
);