如何正确地在WinForms中创建线程GUI应用程序?

时间:2011-04-14 10:04:47

标签: .net winforms multithreading

我来自C背景,目前我想制作一个具有响应式GUI和长时间运行的工作线程的小型WinForms实用程序。

GUI是常规的Form1派生的东西,有进度指示器和东西,工作线程是new System.Threading.Thread();种。

在C ++中,一切都很简单,在.NET中我不知道该怎么做。

是否有PostMessage方式进行数据更新?我是否在读取共享锁保护结构的主线程上踢了一个Timer,还有另一种方法吗?在代表上看到多个文档,但是在10篇不同的文章之后它们似乎不起作用,可能是因为我有一个Worker< - > GUI关系,而不是GUI< - > GUI关系。

所有GUI内容都在GUI类中,所有工作人员都在自己的工作类中。托管世界的最佳实践是什么?

3 个答案:

答案 0 :(得分:4)

有很多方法,但很简单,

  • 启动主题
  • 使用InvokeRequired和Invoke()返回GUI Thread

同样BackgroundWorker提供了一种更简单的方法。

答案 1 :(得分:0)

  1. 使用BackgroundWorker
  2. 使用Control.Invoke
  3. 使用SynchonizationContext
  4. 使用任务并行库(System.Threading.Tasks
  5. 使用Rx
  6. 请勿使用Thread.Start或ThreadPool

答案 2 :(得分:0)

这是WinForms Application中的程序类

 static class Program
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
        }

这里只有一个线程[STAThread]

您可以使用[MTAThread]代替它,以便可以处理多个线程

或者可以使用System.Threading

创建运行时线程