内存不足 - 在 C# 上使用后台工作线程的内存不足异常:在没有后台工作线程的情况下工作正常

本文关键字:工作 内存不足 后台 线程 情况下 异常 | 更新日期: 2023-09-27 17:57:15

我正在用 C# 编写一个项目,在使用 backgroundworker 时遇到问题,以便在运行昂贵的进程时保持我的表单响应。当我使用 bgw 方法时,我得到一个内存不足异常。但是,如果我只是直接运行我的 ExpensiveMethod() 而不使用 bgw,那么我没有任何问题。有什么想法吗?我真的希望在此方法运行时能够实现进度条(这是一个非常耗时的过程,用户需要知道还剩多长时间)。我对 C# 相当陌生,绝对是线程的新手。

以下是我如何实现我的 bgw 和 ExpensiveMethod():

 private void btnGo_Click(object sender, EventArgs e)
 {
     myProgressBar.Visible = true;
     bgw.RunWorkerAsync();           
 }

 private void bgw_DoWork(object sender, DoWorkEventArgs e)
 {
     ExpensiveMethod();
 }
private void bgw_ProgressChanged(object sender, ProgressChangedEventArgs e)
 { 
     myProgressBar.Value = e.ProgressPercentage;
 }
 private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
 {       
     myProgressBar.Visible = false;
 }

private void ExpensiveMethod()
{
    // do a big calculation and call this every so often:
    bgw.ReportProgress((int)percentComplete);
}

但是,此方法在没有内存异常的情况下工作正常,但显然在运行时锁定了表单:

private void btnGoThatWorks_Click(object sender, EventArgs e)
{
    ExpensiveMethod();            
}

有什么想法吗?我使用的是 Windows7 32 位。

内存不足 - 在 C# 上使用后台工作线程的内存不足异常:在没有后台工作线程的情况下工作正常

看来答案是我在打电话给bgw。报告进度((int)百分比完成);经常---更改代码,因此它只报告百分之几似乎已经解决了问题。