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