在我正在处理的应用程序中,有几种形式;一个用于显示三维图像,另一个用于管理。图像中的一些变化是耗时的,并且在它们经历时,两种形式都没有重新绘制。
我想要实现的是至少控制表单(仅由相当标准的组件组成)继续与用户交互并继续重绘。我看到它的方式,它应该被移动到不同的线程,因为它现在使用的线程太忙了。
我该怎么做? Wil Application.Run(secondForm)是否足够?
答案 0 :(得分:2)
你应该在另一个线程中进行繁重的工作。您可以使用后台工作程序来保持简单或管理自己的线程。
这样的事情:
答案 1 :(得分:0)
通常最好将重物卸载到BackgroundWorker上,如Carra suggested。
但要直接回答您的问题,是的,您可以将表单放入单独的帖子中。在这种情况下,它可能并不理想,因为您的背景窗口在很多时候仍然没有响应;但这是可能的。
您希望使用手动创建的Thread(而不是Task或ThreadPool线程),并确保调用Thread.SetApartmentState(ApartmentState) .STA)在你启动线程之前,因为大多数UI需要一个单线程的公寓。然后,您可以在该线程内创建一个Form,并调用Application.Run或Form.ShowDialog。
当然,所有通常的线程限制都适用(只能从创建它们的线程访问表单及其控件)。