.Net:从线程中检索数据

时间:2009-04-01 07:18:58

标签: c# .net multithreading

这是一个简单的Q,但很有帮助:

标题下“从线程中检索数据 MSDN(Here)介绍了一种通过使用回调方法从子线程获取数据的方法,该方法由从主线程传递到的委托封装子线程 - 谁拥有数据。

您可以清楚地看到(MSDN中的最后一个示例page

我的Q是,因为我们正在检索数据(从子线程到主线程),回调方法应该由主线程而不是子线程执行...

我稍微更改了代码(以验证)所以我在每次输出之前附加了线程的名称:

 public static void ResultCallback(int lineCount) {
    Console.WriteLine(Thread.CurrentThread.Name + ":Independent task printed {0} lines.", lineCount);  
}

我将子线程命名为:“Method2”,而主线程为“System”......

我得到了这个输出: Method2 :独立任务打印了1行。

正确的输出应该是:系统:独立任务打印1行..

谁在这里喝醉了? MSDN,我还是.NET?

2 个答案:

答案 0 :(得分:0)

“你”;-p

仍然在工作线程上执行回调;它们将数据提供回调用代码 - 但它们没有内置的方式来中断调用线程。如有必要,您的代码有责任将该工作推回到主线程。例如,在winforms应用程序中,您可能有:

public static void ResultCallback(int lineCount) {
  // runs on worker thread
  Invoke((MethodInvoker)delegate {
      // runs on UI thread
      Console.WriteLine(Thread.CurrentThread.Name +
         ":Independent task printed {0} lines.", lineCount);
  });
}

答案 1 :(得分:0)

如果您不想/需要使用回调并且数据相当小,您可以始终使用共享内存和C#lock关键字。

马切伊。