ConfigureAwait (false) с элементами управления пользовательского интерфейса? - PullRequest
0 голосов
/ 02 марта 2019

Можно ли использовать .ConfigureAwait(false) для следующих двух фрагментов кода?

Случай 1

var ds = new BindingSource();
ds.DataSource = await CallAsync(); // .ConfigureAwait(false);
UIControl.DataSource = ds;

Случай 2

UIControl.DataSource = new BindingSource
{
    DataSource = await CallAsync() // .ConfigureAwait(false)
};

Кажется ли, что первый проблема имеетустановить контроль пользовательского интерфейса в фоновом потоке?Как насчет второго?

1 Ответ

0 голосов
/ 02 марта 2019

Весь доступ к элементам управления должен осуществляться в том же потоке, в котором создан элемент управления.

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

Итак, ответ - да, оба вышеупомянутых случая имеют проблемы и приведут к:

InvalidOperationException: операция между потоками недопустима: элемент управления «Имя элемента управления» доступен из потока, отличного от потока, в котором он был создан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...