在哪里实例化表格?

时间:2011-07-16 05:24:07

标签: c# winforms multithreading

我可能需要一些提示,因为我觉得我这样做的方式不是“正确”的方式,在Visual Studio中创建新的GUI应用程序时的默认设置并没有为我剪切。

我正在做的是我的应用程序中有一个主要类可以完成所有工作。它启动了几个收集和管理数据的线程,我希望它能够“报告”GUI表单的内容。

在我的main.cs(应用程序的入口点)上点击(上面)工作者类(主类)和表单在两个单独的线程中。然后由代表们进行沟通,然后不像我希望的那样“流动”。

如果主窗体在主工作类中进入,那么它拥有gui表单会更好吗?而不是两个单独的线程,需要一些工作来相互沟通?

1 个答案:

答案 0 :(得分:2)

这是一种做法。它可能不是你所做的最佳,取决于你传递的数据:

您可以将表单作为启动对象,并使用BackgroundWorker控件。

BackgroundWorker有几个事件,所有事件都自动在表单线程上运行,因此您不必担心代理。

BackgroundWorker支持报告进度,在完成后台线程后,您可以在完成事件中将对象返回到主线程。

我很确定你不能在同一个线程上启动一个表单,如果你使用你的方法,表单将会阻塞,直到表单关闭(虽然我可能是错的,因为我实际上没有试了一下)