0

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

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

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

4

4 回答 4

6

你没有启动线程。

myThread.Start();

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

于 2012-04-12T20:29:56.537 回答
4

我第一次尝试使用线程

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

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

或多或少按这个顺序。

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

于 2012-04-12T20:36:03.427 回答
3

从一本非常好的书中阅读这个免费章节(诚实的插件 - 这里没有激励):

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

于 2012-04-12T20:44:39.390 回答
1

您需要通过调用来启动线程Start

此外,重要的是要注意MessageBox.Show泵送消息。这就是为什么它在没有显式调用该线程的情况下正常工作1的原因。Application.Run但是,大多数 UI 表单和控件都不能以这种方式工作。通常不要尝试从工作线程访问或创建任何 UI 元素。


1从技术上讲, AMessageBox可以从主 UI 线程以外的线程工作,但它可能会导致一些奇怪的问题。例如,此消息框可能会卡在 UI 线程显示的模式对话框后面。正是由于这个原因,不建议从工作线程显示 UI 元素,即使它们是通过像Form.ShowDialogor之类的自泵调用来显示的MessageBox.Show

于 2012-04-12T20:36:15.157 回答