可以将.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控件的问题?第二个呢?
答案 0 :(得分:1)
所有对控件的访问应在创建控件的同一线程中完成。
通过调用ConfigureAwait(false)
,您正在要求不要尝试将继续处理封送回捕获的原始上下文。这意味着代码将在与无效操作的UI线程不同的上下文中继续执行。
因此,答案是肯定的,以上两种情况都存在问题,并且会导致:
InvalidOperationException:跨线程操作无效:从创建该线程的线程之外的其他线程访问控件“控件名称”。