SerialPort.Close () и обработчики событий - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть программа WPF, в которой я читаю довольно много данных из последовательного порта, и в данный момент я перебираю цикл for для чтения данных в пакет за раз и записи их в файл.,Я хочу сделать эту операцию обработкой событий, чтобы пользовательский интерфейс мог продолжать обновляться, пока это происходит.

Я подумал, что для этой цели лучше всего использовать событие SerialPort.DataReceived, однако я бы хотелнужно иметь возможность удалить этот обработчик из моего SerialPort объекта по завершении задачи.Это сделано, когда я звоню Close()?Или мне нужно удалить обработчик каким-либо другим способом?

Ответы [ 3 ]

2 голосов
/ 01 февраля 2012

Я бы тогда написал бы варпер для SerialPort.И пусть обертка отслеживает обработчики и удаляет их при закрытии.(Таким образом, вам не нужно реализовывать эту логику во всех случаях использования.) Используя метод - =.

Каждый экземпляр должен иметь свое собственное событие для хранения вызовов.(не увольнять их)

Например:

    private event EventHandler myHandle;
    public event EventHandler myExposedHandle
    {
        add
        {
            myHandle += value;
            serialPort.DataReceived += value;
        }
        remove
        {
            myHandle -= value;
            serialPort.DataReceived -= value;
        }
    }
    public void removeFunction()
    {
        myHandle = null;
        serialPort.DataReceived -= myHandle;
    }
0 голосов
/ 01 февраля 2012

Я бы оставил обработчик, но вместо этого проверил, когда вам это нужно в логике обработчика.

0 голосов
/ 01 февраля 2012

Если вы повторно используете один и тот же объект SerialPort, просто установите для события значение null, чтобы удалить ваш обработчик. Пока нет стековых обработчиков, это должно работать нормально; в противном случае все становится немного сложнее.

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