Какой самый лучший / самый безопасный способ получить доступ к основному потоку пользовательского интерфейса? - PullRequest
0 голосов
/ 20 сентября 2011

Я хотел бы знать, какой самый лучший / самый безопасный способ получить доступ к основному потоку пользовательского интерфейса из другого потока.

Должен ли я использовать 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?

Самое главное, я бы хотел, чтобы мой пользовательский интерфейс реагировал.

1 Ответ

1 голос
/ 20 сентября 2011

Invoke (), если вы хотите назвать его синхронным, а BeginInvoke () - для асинхронного. Если вы используете BeginInvoke, вам нужно будет передать делегат, который будет вызван после завершения операции.

Вы уже находитесь в фоновом потоке, поэтому пользовательский интерфейс останется отзывчивым в любом случае. Это зависит только от того, хотите ли вы, чтобы выполнение этого потока ожидало завершения операции, или же вы хотите, чтобы оно выполнялось в фоновом режиме, пока продолжается выполнение этого потока.

...