例如,我如何将 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));
}
}
最佳答案
您不能在拥有该对象的线程以外的线程中使用具有线程关联性的对象(例如 TextBox
对象)。
但是大多数对象不具有线程关联性。它们不属于任何特定线程,可以在任何地方使用。其中包括由 filterTextBox.Text
返回的 string
对象,您将其存储在 filter
局部变量中。
所以,只需使用该值即可:
dirListing.ItemsSource = await Task.Run(()=> Filterfiles(filter));
请注意,您也不需要为 Task.Run()
方法调用指定类型参数。编译器将根据调用中使用的表达式推断类型。
关于c# - Task.Run() 如何传递其他线程拥有的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44788011/