0

可以.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)
};

第一个好像是后台线程设置UI控件的问题?第二个怎么样?

4

1 回答 1

2

对控件的所有访问都应在创建控件的同一线程中完成。

通过调用ConfigureAwait(false),您要求不要尝试将延续编组回捕获的原始上下文。这意味着代码在与无效操作的 UI 线程不同的上下文中继续执行。

所以,答案是肯定的,以上两种情况都有问题,会导致:

InvalidOperationException:跨线程操作无效:控件“控件名称”从创建它的线程以外的线程访问。

于 2019-03-02T04:52:51.883 回答