C# 锁定浏览器窗体

C# 锁定浏览器窗体,c#,C#,如何解决webBrowser的崩溃问题 此代码: private void button1_Click(object sender, EventArgs e) { BackgroundWorker backgroundWorker = new BackgroundWorker(); backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);

如何解决webBrowser的崩溃问题

此代码:

 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);