.NET - Обеспечение обработки событий между потоками не вызовет исключения после удаления формы - PullRequest
0 голосов
/ 13 марта 2019

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

Я хочу отобразить ход выполнения этой операции для пользователя, поэтому я создал форму с ходом выполнения.бар с именем ProgressBarCal.Чтобы синхронизировать операцию с графическим интерфейсом, я использую Form.BeginInvoke()

. Проблема в том, что, поскольку фоновый поток выходит из формы, он может генерировать события во время удаления формы, что приводит к ObjectDisposedException при выполнении ProgressBarCal.Value = e.progress.Я решил использовать следующую стратегию, чтобы избежать создания исключения:

Private Sub OnCalibrationProgressReport(sender As Object, e As CalibrationEventArgs)

    If InvokeRequired Then
        BeginInvoke(Sub() OnCalibrationProgressReport(sender, e))
        Return
    End If

    Try
        If e.timeout Then 'if the operation timeout we tell user
            MessageBox.Show("Calibration timeout.")
        Else
            ProgressBarCal.Value = e.progress 'otherwise we display progress
        End If
    Catch ex As ObjectDisposedException When Me.IsDisposed
        'ignore this exception
    End Try

End Sub

Использование When Me.IsDisposed после Catch ex As ObjectDisposedException обеспечит только исключение ObjectDisposedException, которое я хочу игнорировать (основываясь на моем вопросе)игнорируются, что делает этот код надежным?

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