1

我有一个函数可以将大量文件添加到集合中,并对每个文件执行大量操作。

这会导致程序(主线程)变得无响应。

如何确定原因并解决问题?

4

2 回答 2

1

使用 BackgroundWorker 对象。您可以使用 ReportProgress 和 ProgressChanged 事件通知用户操作的进度。

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    progressBar1.Value = e.ProgressPercentage;
}

private void Form1_Load(object sender, EventArgs e)
{
    backgroundWorker1.WorkerReportsProgress = true;
    backgroundWorker1.RunWorkerAsync();
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{

    // .. stuff that takes long

    backgroundWorker1.ReportProgress(10);

    // .. stuff that takes long

    backgroundWorker1.ReportProgress(20);

    // .. stuff that takes long

    backgroundWorker1.ReportProgress(100);
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    // Done !
}
于 2012-09-11T11:18:58.183 回答
0

使用另一个线程。

Thread t = new Thread(new ThreadStart( () => {
   IntensiveCalculationCode();
}));

t.Start();

您还可以通过调用调度程序从线程内部调用 UI 线程。但它们在 Windows 窗体和 WPF 上并不完全相同。

于 2012-09-11T11:13:00.980 回答