繁体   English   中英

C#UI线程无响应

[英]C# UI Thread Unresponsive

我有一个函数,可以向集合中添加很多文件,并对每个文件执行很多操作。

这将导致程序(主线程)无响应。

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

使用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 !
}

使用另一个线程。

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

t.Start();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM