Закрытая форма веб-браузера - PullRequest
0 голосов
/ 22 марта 2020

Как решить проблему cra sh с 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 изображений он блокирует приложение и повышает процесс работы машины.

Как решить эту проблему?

1 Ответ

1 голос
/ 22 марта 2020

Вы кушаете системные ресурсы. (Вы можете видеть, что если вы запустите свой диспетчер задач, go к деталям и добавите столбец «Ручки». Затем посмотрите, как он растет по мере выполнения вашей программы)

Есть две вещи, которые вы можете рассмотреть:

Интерфейс IDisposable

Всегда удаляйте объекты, содержащие интерфейс IDisposable.

Например, попробуйте изменить этот код:

 _progresso = new Progresso();
 _progresso.ShowDialog();

до:

using (_progresso = new Progresso())
{
 _progresso.ShowDialog();
}

Создание экземпляра

Кроме того, Фоновый работник должен быть должным образом удален или создан только один раз.

Вы чрезмерно используете ресурсы, когда вы позволяете ему работать таким образом. Попробуйте использовать один экземпляр вместо того, чтобы создавать новые экземпляры и регистрироваться в их событиях каждый раз, когда вы нажимаете.

Вы можете, например, удалить эти строки:

// BackgroundWorker backgroundWorker = new BackgroundWorker();
// _progresso = new Progresso();

и поместить их в свой конструктор. .

Кроме того, когда ваш класс не реализует IDisposable, реализуйте его. Затем утилизируйте их, внедрив одноразовый интерфейс ..

    protected override void Dispose(bool disposing);

Если полезно, примите ответ ..

Привет, Майк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...