作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想在我的项目 (WPF) 中使用并行编程。这是我的 for 循环代码。
for (int i = 0; i < results.Count; i++)
{
product p = new product();
Common.SelectedOldColor = p.Background;
p.VideoInfo = results[i];
Common.Products.Add(p, false);
p.Visibility = System.Windows.Visibility.Hidden;
p.Drop_Event += new product.DragDropEvent(p_Drop_Event);
main.Children.Add(p);
}
它没有任何问题。我想用 Parallel.For 写它,我写了这个
Parallel.For(0, results.Count, i =>
{
product p = new product();
Common.SelectedOldColor = p.Background;
p.VideoInfo = results[i];
Common.Products.Add(p, false);
p.Visibility = System.Windows.Visibility.Hidden;
p.Drop_Event += new product.DragDropEvent(p_Drop_Event);
main.Children.Add(p);
});
但是在producd类的构造函数中出现错误是
调用线程必须是 STA,因为很多 UI 组件都需要这个。
然后我使用了 Dispatcher 。这是代码
Parallel.For(0, results.Count, i =>
{
this.Dispatcher.BeginInvoke(new Action(() =>
product p = new product();
Common.SelectedOldColor = p.Background;
p.VideoInfo = results[i];
Common.Products.Add(p, false);
p.Visibility = System.Windows.Visibility.Hidden;
p.Drop_Event += new product.DragDropEvent(p_Drop_Event);
main.Children.Add(p)));
});
由于我的“p”对象,我得到了错误。它期望“;”并且它还表示产品类别;类名此时无效。然后我在 Parallel.For 上面创建了产品对象,但我仍然得到错误..
我该如何修正我的错误?
最佳答案
简单的答案是您正在尝试使用需要单线程的组件,更具体地说,它们看起来只想在 UI 线程上运行。所以使用 Parallel.For
对你没有用。即使在使用调度程序时,您也只是将工作编码到单个 UI 线程,这会抵消Parallel.For
带来的任何好处。
关于c# - 如何使用Parallel.For?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11952730/
我是一名优秀的程序员,十分优秀!