带有UI控件的ConfigureAwait(false)



可以在以下两个代码段中使用.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控件的问题?第二个怎么样?

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

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

因此,答案是肯定的,上面的情况都有问题,并且会导致:

InvalidOperationException:跨线程操作无效:从其创建的线程以外的线程访问的"控制名称"。

最新更新