我会使用一个任务。这样整个操作在后台运行而不会阻塞 UI。不过,请务必更新主线程上的列表框。我不确定如何在 WinForms 中执行此操作,但在 WPF 中,您可以使用以下方法Dispatcher.Invoke()
或Dispatcher.BeginInvoke()
类似方法来完成它。
如果订购很重要:
Task.Factory.StartNew(
() =>
{
foreach (string value in myList)
{
string result = TimeConsumingTask(value);
//update UI
Application.Current.Dispatcher.BeginInvoke(
(Action)(() => listBox.Add(result)));
}
});
如果订购无关紧要,您也可以使用Parallel.ForEach()
.
Task.Factory.StartNew(
() =>
{
Parallel.ForEach(myList,
value =>
{
string result = TimeConsumingTask(value);
//update UI
Application.Current.Dispatcher.BeginInvoke(
(Action)(() => listBox.Add(result)));
});
});
}