[英]Use ConfigureAwait(false) or Task.Run to avoid blocking UI Thread
[英]ConfigureAwait(false) with UI controls?
可以將.ConfigureAwait(false)
用於以下兩個代碼片段嗎?
情況1
var ds = new BindingSource();
ds.DataSource = await CallAsync(); // .ConfigureAwait(false);
UIControl.DataSource = ds;
情況二
UIControl.DataSource = new BindingSource
{
DataSource = await CallAsync() // .ConfigureAwait(false)
};
第一個似乎在后台線程上設置UI控件有問題嗎? 第二個呢?
所有對控件的訪問都應在創建控件的同一線程中完成。
通過調用ConfigureAwait(false)
您正在要求不要嘗試將繼續處理封送回捕獲的原始上下文。 這意味着代碼將在與無效操作的UI線程不同的上下文中繼續執行。
因此,答案是肯定的,以上兩種情況都存在問題,並且將導致:
InvalidOperationException:跨線程操作無效:從創建該線程的線程以外的線程訪問控件“控件名稱”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.