我有一个函数可以将大量文件添加到集合中,并对每个文件执行大量操作。
这会导致程序(主线程)无响应。
如何确定原因并解决问题?
答案 0 :(得分: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 !
}
答案 1 :(得分:0)
使用另一个帖子。
Thread t = new Thread(new ThreadStart( () => {
IntensiveCalculationCode();
}));
t.Start();
您还可以通过调用调度程序从线程内部调用UI线程。它们在Windows窗体和WPF上并不完全相同。