我如何将textBox UI元素的文本传递给Task.Run()方法?此代码将抛出异常(...其他线程拥有它)。当我传递过滤变量时,异常就消失了,这是因为字符串是作为值传递的吗?
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));
}
}
答案 0 :(得分:3)
您不能在拥有该对象的线程之外的线程中使用具有线程关联性的对象(例如TextBox
对象)。
但是大多数对象不具有线程亲和力。它们不归任何特定线程所有,可以在任何地方使用。其中包括string
返回的filterTextBox.Text
对象,您将其存储在filter
局部变量中。
所以,只需使用该值:
dirListing.ItemsSource = await Task.Run(()=> Filterfiles(filter));
请注意,您不需要为Task.Run()
方法调用指定类型参数。编译器将根据调用中使用的表达式推断类型。