这是一个简单的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?
答案 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关键字。
马切伊。