簡體   English   中英

具有UI控件的ConfigureAwait(false)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM