我想在我的项目(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类构造函数中的错误occours是
调用线程必须是STA,因为许多UI组件都需要这个.。
那我就用调度员。这是代码
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之上创建了产品对象,但仍然出现了错误。
我怎样才能纠正我的错误?
发布于 2012-08-14 12:59:33
简单的答案是,您尝试使用需要单线程的组件,更具体地说,它们似乎只想在UI线程上运行。因此,使用Parallel.For对您不会有任何帮助。即使在使用dispatcher时,也只是将工作封送到单个 UI线程,这否定了Parallel.For的任何好处。
发布于 2012-08-14 12:57:54
不能从后台线程与UI交互。
因此,您不能使用Parallel.For来管理UI。
发布于 2012-08-14 13:05:09
我不会解释关于线程处理的其他答案,我只是提供您的第二段代码的固定版本:
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);
})));但不会有任何好处,因为编码大猩猩。
https://stackoverflow.com/questions/11952730
复制相似问题