在另一个线程中处理时在特定线程中调用方法

时间:2013-03-12 10:14:20

标签: c# multithreading task

我正在开始这样一个长期运行的任务:

task = Task.Factory.StartNew(LongRunningMethod, TaskCreationOptions.LongRunning);

LongRunningMethod 中,我正在调用引发事件的第三方方法。该事件包含我需要添加到数据表中的数据:

dataTable.Rows.Add(e.Data);

麻烦的是, dataTable 可以与某个需要调用 Invoke 方法的视图相关联,但我不想添加任何对接口的引用,实现调用之类的方法。

我想做那样的事情:

originalThread.Invoke(() => dataTable.Rows.Add(e.Data));

实现这一目标的最佳选择是什么?

1 个答案:

答案 0 :(得分:2)

通过汇总有用的评论,我可以提供答案。

根据Henk Holterman,不可能中断原始线程,存储其上下文,执行某些操作,然后恢复其先前的上下文并进一步运行。

目标表示层有特定的解决方案,如WinForms中的BackgroundWorker Class和WPF中的Dispatcher Class

我认为,就我的情况而言,sll的建议效果最佳。我可以使用SynchronizationContext Class及其Post Method。以下是一个例子:

originalSynchronizationContext = SynchronizationContext.Current;
task = Task.Factory.StartNew(LongRunningMethod, TaskCreationOptions.LongRunning);

并行LongRunningMethod:

originalSynchronizationContext.Post(state => dataTable.Rows.Add(e.Data), null);
相关问题