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