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

时间:2011-09-20 08:59:06

标签: c# .net multithreading thread-safety dispatcher

我想知道,从另一个线程访问主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时会对性能产生什么影响?

最重要的是,我想让我的用户界面保持响应。

1 个答案:

答案 0 :(得分:1)

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

您已经在后台线程中,因此UI将以任何方式保持响应。只是取决于你是否希望这个线程的执行等待操作完成,或者如果你想在后台完成这个线程的继续执行它。