Рейтинг:
16
Member 12643399
ОК, я поменял "вид спорта.DataReceived += sPort_DataReceived;" =&ГТ; "спорт.DataReceived += новый SerialDataReceivedEventHandler(sPort_DataReceived);" =&ГТ; "sPort_DataReceived частных статических недействительным(объект отправителя, SerialDataReceivedEventArgs е)", и я вижу, что изменение содержимого метки или "диспетчером.Invoke(new EventHandler(DisplayData));" не может быть использован таким образом, потому что "ссылка на объект требуется для нестатического поля, метода или свойства ..." так как же мне решить эту проблему? Вторая и третья ссылки мне не помогли, это примеры WinForm, и мой код там работал :(
[no name]
Нет необходимости в статике. Смотрите мою правку и, пожалуйста, научитесь пользоваться Google. Я не могу комментировать дальше, потому что не вижу вашего кода.
Member 12643399
Да, я видел это, но подумал, что есть лучший способ, и оставил его. Однако теперь он, кажется, работает нормально, так что спасибо :)
Рейтинг:
1
Patrice T
Цитата:
Мне нужно что-то отображать, когда я получаю данные. Не могли бы вы сказать мне, как исправить мой код? Я думаю, что вызов нового EventHandler работает неправильно.
Там нечего исправлять, вам нужно переписать свой код.
Но прежде всего вам нужно понять, как работает последовательный порт. Это slooooow, очень sloooooow, не ожидайте, что ваши данные будут ждать в буфере сразу после открытия порта.
Последовательная связь в C# для начинающих[
^]
sPort.DataReceived += sPort_DataReceived;
Объект последовательного порта не является местом хранения данных, есть буфер, но вы не можете использовать его для хранения некоторых данных.
Учебник По Связи Последовательного Порта С Примерами C# - CodeSamplez.com[
^]
Member 12643399
Ну, должно быть, что-то не так с этим кодом, потому что, когда приходят данные, я получаю "приложение находится в режиме перерыва". Точно я знаю, как это работает с WinForm, но похоже, что WPF работает немного по-другому?
Рейтинг:
0
Bernhard Hiller
Вы пометили свой вопрос "WPF", но ваш код больше похож на Windows Forms. Использовать ViewModel
со свойствами, привязанными к пользовательскому интерфейсу. То PropertyChanged
событие будет автоматически отправлено в поток пользовательского интерфейса, так что вы избежите всех проблем с перекрестной резьбой (DataReceived
происходит всегда в другом потоке).
И вы также должны узнать, когда вы больше не получите никаких байтов (посмотрите на протокол для вашего устройства), чтобы снова изменить сообщение о состоянии.