第一次多线程器

本文关键字:多线程 第一次 | 更新日期: 2023-09-27 18:30:50

我第一次尝试使用线程,并提出了这个:

Thread myThread  = new Thread(() =>
  {
    test = Class1.getNumbers(param1, param 2);
    MessageBox.Show(test.toString());
  });

不过,这对我没有任何作用。我做错了什么?

第一次多线程器

您没有启动线程。

myThread.Start();

(您在 MessageBox 调用中也有一个语法错误...

我第一次尝试使用线程

尽量避免直接使用 Thread 类。这是很少需要的。
查:

  • 后台工作者
  • 任务并行库
  • 线程池

多或少按照这个顺序。

它们都在线程之上提供层来帮助您。

阅读一本非常好的书中的免费章节(诚实的插头 - 这里没有动力):

它是共识,并以渐进的方式为您提供所需的专业知识,因此您不会太快地进入太高的水平。 你的问题的答案在前几段...

您需要

通过调用 Start 来启动线程。

此外,重要的是要注意MessageBox.Show泵送消息。这就是为什么它可以正常工作1 而无需显式调用该线程上的 Application.Run。但是,大多数 UI 窗体和控件都不能以这种方式工作。通常不要尝试从工作线程访问或创建任何 UI 元素。


1从技术上讲,MessageBox可以从主 UI 线程以外的线程工作,但它可能会导致一些奇怪的问题。例如,此消息框可能会停滞在 UI 线程显示的模式对话框后面。正是出于这个原因,除其他外,不建议显示来自工作线程的 UI 元素,即使它们是通过 Form.ShowDialogMessageBox.Show 等自抽水调用完成的。