访问主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方法的主要区别是什么?

使用BeginInvokeInvoke会对性能产生什么影响?

最重要的是,我想保持我的UI响应。

访问主UI线程的最好/最安全的方法是什么?

如果你想调用同步调用Invoke(),如果你想异步调用BeginInvoke()。如果使用BeginInvoke,则需要在操作完成时传递要调用的委托。

你已经在后台线程上,所以UI将保持响应。这取决于你是想让这个线程的执行等待操作完成,还是想让它在后台执行,而这个线程的执行继续。