我有一个方法从数据库中读取并使用yield
返回逐个返回结果项。我在foreach
循环中调用它,并在每次迭代时调用STA thread
进行更新ProgressBar
。在这种情况下,对于某些参数,我大约需要6秒钟。但是如果我删除Invoke
,那么相同的参数我得到28秒。我在单独的应用程序中测试此行为,并且可以说Invoke
每次迭代到主线程处理的速度要慢10倍。但是,Invoke
在我的应用程序中比其他已完成的示例中的要快6倍 (不慢)!。
有什么建议吗?
一般来说,它看起来像这样:
Thread thread = new Thread(() =>
{
int itemNumber = 0;
foreach (object item in SelectItems())
{
itemNumber++;
// doing some staff ...
Application.Current.Dispatcher.Invoke(
new Action(() =>
{
ProgressBar1.Value = itemNumber * 100 / count;
}),
null);
}
});
thread.IsBackground = true;
thread.Start();
更新
我想我需要说这是一个很大的应用程序,并且有大约半百个后台线程。而且我认为它们不能同时发挥作用。