在BackgroundWorker中创建表单的实例

时间:2010-10-08 15:48:44

标签: c# forms

我想在BackgroundWorker中创建表单的新实例。我注意到,当我这样做时,新发布的表格会冻结。

Frozen form

为什么这个表格会冻结?我怎么能绕过这个?

2 个答案:

答案 0 :(得分:3)

因为你在错误的线程中创建表单而冻结了 - 后台线程中没有运行事件循环。

您应该只在UI线程中创建或触摸UI元素。 BackgroundWorker为此提供了一些钩子,或者您可以使用Control.Invoke / BeginInvoke

答案 1 :(得分:0)

当表单“运行”时,它需要有一个运行WndProc的线程并处理来自Windows的传入消息。您应该考虑在这里做的是使用Application.Run()方法来启动表单。这将做必要的工作,以确保WndProc正常运行,我相信你可以在必要时从你的后台线程调用它。