【问题标题】:Where to instantiate the form?在哪里实例化表单?
【发布时间】:2011-07-16 05:24:06
【问题描述】:

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

我正在做的是我的应用中有一个主类来完成所有工作。它启动了几个收集和管理数据的线程,我希望它向 GUI 报告它的工作。

要从我的 main.cs(应用程序的入口点)中删除(上图),它会在两个单独的线程中初始化工作类(主类)和表单。交流是由代表进行的,因此不像我希望的那样“流畅”。

如果主窗体在主工人阶级中被初始化,那么它拥有 gui 窗体会更好吗?而不是需要一些工作才能相互通信的两个单独的线程?

【问题讨论】:

    标签: c# winforms multithreading


    【解决方案1】:

    这是一种方法。它可能不是您正在做的最佳选择,具体取决于您传递的数据:

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

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

    BackgroundWorker支持上报进度,后台线程完成后可以在完成事件中返回一个对象给主线程。

    我很确定您不能在同一个线程上启动表单,如果您执行初始化表单的方法将阻塞直到表单关闭(尽管我可能是错的,因为我实际上并没有试过了)

    【讨论】:

      猜你喜欢
      • 2012-05-04
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多