我想在BackgroundWorker中创建表单的新实例。我注意到,当我这样做时,新发布的表格会冻结。
为什么这个表格会冻结?我怎么能绕过这个?
答案 0 :(得分:3)
因为你在错误的线程中创建表单而冻结了 - 后台线程中没有运行事件循环。
您应该只在UI线程中创建或触摸UI元素。 BackgroundWorker
为此提供了一些钩子,或者您可以使用Control.Invoke
/ BeginInvoke
。
答案 1 :(得分:0)
当表单“运行”时,它需要有一个运行WndProc的线程并处理来自Windows的传入消息。您应该考虑在这里做的是使用Application.Run()
方法来启动表单。这将做必要的工作,以确保WndProc正常运行,我相信你可以在必要时从你的后台线程调用它。