访问主UI线程的最好/最安全的方法是什么?
本文关键字:安全 方法 是什么 线程 访问 UI | 更新日期: 2023-09-27 18:09:10
我想知道,从另一个线程访问主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
会对性能产生什么影响?
最重要的是,我想保持我的UI响应。
如果你想调用同步调用Invoke(),如果你想异步调用BeginInvoke()。如果使用BeginInvoke,则需要在操作完成时传递要调用的委托。
你已经在后台线程上,所以UI将保持响应。这取决于你是想让这个线程的执行等待操作完成,还是想让它在后台执行,而这个线程的执行继续。