【发布时间】:2013-04-30 13:45:32
【问题描述】:
我需要编写扩展方法,它可以像Task.ContinueWith() 一样工作,但在主线程上和Task.ContinueWith() 结束之后。
public static Task ContinueWithOnMainThread(this Task task, Action action) {
return task.ContinueWith(t => action(), TaskScheduler.FromCurrentSynchronizationContext());
}
此方法有效,但在 Task.ContinueWith() 之前执行
我就是这样测试的:
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
Loaded += delegate {
LogThread("\nInMain ThredId: " + Thread.CurrentThread.ManagedThreadId);
var task = new Task(InTask);
task.ContinueWith(TaskContinue);
task.ContinueWithOnMainThread(ReturnedToMainThread);
task.Start();
};
}
void InTask() {
this.Dispatcher.Invoke(DispatcherPriority.DataBind, (Action<string>)LogThread, "\nInTask ThredId: " + Thread.CurrentThread.ManagedThreadId);
}
void TaskContinue(Task task) {
this.Dispatcher.Invoke(DispatcherPriority.DataBind, (Action<string>)LogThread, "\nTaskContinue ThredId: " + Thread.CurrentThread.ManagedThreadId);
}
void ReturnedToMainThread() {
LogThread("\nReturnedToMainThread ThredId: " + Thread.CurrentThread.ManagedThreadId);
}
void LogThread(string text) {
TB.Text += text;
}
}
【问题讨论】:
-
您尝试过任何方法吗?请阅读FAQ和How to Ask
-
你的情况真的不清楚 - 你没有告诉我们你是如何使用这个的,或者你是如何诊断问题的。
-
现在我的情况清楚了吗?
标签: c# .net multithreading task-parallel-library