可以在以下两个代码段中使用.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:跨线程操作无效:从其创建的线程以外的线程访问的"控制名称"。