C# 锁定浏览器窗体
如何解决webBrowser的崩溃问题 此代码:C# 锁定浏览器窗体,c#,C#,如何解决webBrowser的崩溃问题 此代码: private void button1_Click(object sender, EventArgs e) { BackgroundWorker backgroundWorker = new BackgroundWorker(); backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
private void button1_Click(object sender, EventArgs e)
{
BackgroundWorker backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted);
backgroundWorker.RunWorkerAsync();
_progresso = new Progresso();
_progresso.ShowDialog();
}
private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
_progresso.Close();
_impressaoBoleto.webBrowser.Navigate(_arquivo);
_impressaoBoleto.ShowDialog();
}
它生成多个图像并在webBrowser中显示,但是当我有100多个图像时,它会锁定应用程序并引发机器进程
如何解决这个问题?您正在消耗系统资源。(您可以看到,如果启动任务管理器,请转到“详细信息”并添加“句柄”列。然后观察它随着程序的运行而增长) 有两件事你可以考虑: IDisposable界面 始终处置包含IDisposable接口的对象 例如,尝试更改该代码:
_progresso = new Progresso();
_progresso.ShowDialog();
收件人:
实例创建
此外,Backgroundworker需要正确地处理或只实例化一次
当您让资源以这种方式运行时,您正在过度使用资源。尝试使用一个实例,而不是每次单击时创建新实例并注册到它们的事件
例如,您可以删除以下行:
// BackgroundWorker backgroundWorker = new BackgroundWorker();
// _progresso = new Progresso();
并将其放入构造函数中
另外,当您的类未实现IDisposable时,请实现它。然后通过实现一次性接口来处理它们
protected override void Dispose(bool disposing);
如果有帮助,请接受答案
您好,迈克我做了切换,但仍然不起作用,它一直在崩溃。我编辑了答案以澄清如何处理组件。你能把全班都发出去吗。您似乎在使用和正确处理组件方面有问题,当我看到这个类时,我可以更准确地回答
protected override void Dispose(bool disposing);