簡體   English   中英

Task.Run()如何傳遞其他線程擁有的對象?

[英]Task.Run() how to pass object owned by other thread?

例如,如何將textBox UI元素的文本傳遞給Task.Run()方法? 此代碼將引發異常(其他線程擁有該異常)。 當我通過過濾器variabele時,異常消失了,這是因為字符串作為值傳遞了嗎?

private async void filterTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
    if (currentSession.SessionFilenames != null)
    {
        string filter = filterTextBox.Text;
        dirListing.ItemsSource = await Task<IEnumerable<string>>.Run(()=> Filterfiles(filterTextBox.Text));
    }
}

除了擁有該對象的線程之外,您不能在其他線程中使用具有線程親和力的對象(例如TextBox對象)。

但是大多數對象沒有線程關聯。 它們不屬於任何特定線程,可以在任何地方使用。 其中包括filterTextBox.Text返回的string對象,該對象存儲在filter局部變量中。

因此,只需使用該值即可:

dirListing.ItemsSource = await Task.Run(()=> Filterfiles(filter));

請注意,您也不需要為Task.Run()方法調用指定類型參數。 編譯器將根據調用中使用的表達式來推斷類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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