我想知道,从另一个线程访问主UI线程的最佳/最安全的方法是什么。
我应该使用Dispatcher.BeginInvoke
吗?
_cancelationTokenSource = new CancellationTokenSource();
new Task(() =>
{
Dispatcher.BeginInvoke((Action)(() =>
{
//process data
}));
}, _cancelationTokenSource.Token, TaskCreationOptions.LongRunning).Start();
或者我应该使用Dispatcher.Invoke
?
_cancelationTokenSource = new CancellationTokenSource();
new Task(() =>
{
Dispatcher.Invoke((Action)(() =>
{
//process data
}));
}, _cancelationTokenSource.Token, TaskCreationOptions.LongRunning).Start();
2种Invoke
方法之间的主要区别是什么?
使用BeginInvoke
和Invoke
时会对性能产生什么影响?
最重要的是,我想让我的用户界面保持响应。
答案 0 :(得分:1)
如果要将其称为同步调用Invoke(),则为异步调用BeginInvoke()..如果使用BeginInvoke,则需要在操作完成时传递要调用的委托。
您已经在后台线程中,因此UI将以任何方式保持响应。只是取决于你是否希望这个线程的执行等待操作完成,或者如果你想在后台完成这个线程的继续执行它。