我知道从另一个线程更新UI线程的技术。
所以我有这两种方法/技巧,我应该使用哪一种?
使用任务:
var uiTask = Task.Factory.StartNew(() => {
// change something on ui thread
var action = theActionOnUiThread;
if (action != null) {
action();
}
}, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
使用Dispatcher:
Dispatcher.CurrentDispatcher.BeginInvoke(
new Action(() => {
// change something on ui thread
var action = theActionOnUiThread;
if (action != null) {
action();
}
}));
答案 0 :(得分:2)
从技术角度来看,我怀疑这里有一个“最好的”。但是我会选择调度员方法:
(1)例如见here
答案 1 :(得分:1)
TaskScheduler.FromCurrentSynchronizationContext()
并不保证会为您提供TaskScheduler
的UI线程。
实际上它有时可以返回null
,虽然这些情况很少见,通常涉及在本机应用程序(例如WIX引导程序)中启动自己的调度程序。
所以我说使用调度程序版本会更安全。