【发布时间】:2021-11-21 18:55:31
【问题描述】:
我有一个标准的foreach 循环,后来我变成了Parallel.Foreach()。但是在我的循环中,我有一些区域可以访问 UI 元素并获取和设置 UI 元素信息。
所以当我运行它时,我得到一个错误,我无法访问该元素,因为另一个线程可以访问它。我需要访问多个元素,x:Name 存储在列表中。
我该如何克服这个问题?
Parallel.ForEach(calculatedTestVariables, variable =>
{
string idName = "id_" + variable.id;
var textBox = this.FindName(idName) as TextBox; //need the text from this TextBox
//some calculations
int x = 1 + 2 + 3 + 4
textBox.Text = x.toString();
});
【问题讨论】:
-
你应该使用数据绑定和可能的数据模板来避免这种讨厌的代码。
-
控件具有线程亲和性:您只能从拥有的线程访问它们。出于这个原因,在后台线程上进行 UI 工作是没有意义的。只需将繁重的计算移至后台线程,然后返回 UI 线程以使用结果更新您的 UI。
标签: wpf multithreading loops