У меня есть приложение, над которым я работаю в WPF. Он использует соединение последовательного порта. Я создал класс, который охватывает соединение последовательного порта и управляет буферами и т. д.
Я разработал его при написании приложения C# WinForms (.NET6). Чтобы события последовательного порта могли обновлять текстовое поле в главной форме и отправлять полученные байты обработчику пакетов, я создал делегат и использовал BeginInvoke для его запуска. Все работало отлично.
Я взял ту же оболочку и включил ее в новое приложение WPF, без обновлений текстового поля/обработчика пакетов, включенных только для начала (поэтому отправлял только байты). . Он также работал нормально. Я раскомментировал приемную часть оболочки, и все по-прежнему компилируется нормально (но, конечно, без кода в основной форме входящие байты не обрабатывались).
Когда я добавил код в основной формы для вызова делегата, я получил ошибки компиляции. Сначала я думал, что это .NET6/.NET8, но я открыл старый проект и изменил целевой .NET, и он по-прежнему работал нормально.
Итак, мне интересно если это WinForms или WPF. Ошибка:
CS1501 Нет перегрузки для метода «BeginInvoke» принимает 3 аргумента.
Тем не менее, тот же код компилируется и запускается в старом проекте. .
Вот код, о котором идет речь:
void ProcessRecievedByte_Callback(object sender, byte rcvdByte)
{
this.BeginInvoke(new ES_UART.RxBufferRemoveByteEventHandler(ES_RxBufferProcessor), sender, rcvdByte);
}
void ES_RxBufferProcessor(object sender, byte e)
{
switch (receiveState)
{
case receive_state.WAITING_FOR_SOP:
if (e == '$')
{
receiveState = receive_state.IN_A_PACKET;
packetIndex = 0;
packetBuffer[packetIndex] = e;
packetIndex++;
}
break;
case receive_state.IN_A_PACKET:
if (packetIndex < MAX_PACKET_SIZE)
{
packetBuffer[packetIndex] = e;
packetIndex++;
}
if (e == '\n')
receiveState = receive_state.PACKET_RECIEVED;
break;
case receive_state.PACKET_RECIEVED:
break;
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... d-winforms
Поведение BeginInvoke отличается в WPF и WinForms ⇐ C#
Место общения программистов C#
-
Anonymous
1721975525
Anonymous
У меня есть приложение, над которым я работаю в WPF. Он использует соединение последовательного порта. Я создал класс, который охватывает соединение последовательного порта и управляет буферами и т. д.
Я разработал его при написании приложения C# WinForms (.NET6). Чтобы события последовательного порта могли обновлять текстовое поле в главной форме и отправлять полученные байты обработчику пакетов, я создал делегат и использовал BeginInvoke для его запуска. Все работало отлично.
Я взял ту же оболочку и включил ее в новое приложение WPF, без обновлений текстового поля/обработчика пакетов, включенных только для начала (поэтому отправлял только байты). . Он также работал нормально. Я раскомментировал приемную часть оболочки, и все по-прежнему компилируется нормально (но, конечно, без кода в основной форме входящие байты не обрабатывались).
Когда я добавил код в основной формы для вызова делегата, я получил ошибки компиляции. Сначала я думал, что это .NET6/.NET8, но я открыл старый проект и изменил целевой .NET, и он по-прежнему работал нормально.
Итак, мне интересно если это WinForms или WPF. Ошибка:
CS1501 Нет перегрузки для метода «BeginInvoke» принимает 3 аргумента.
Тем не менее, тот же код компилируется и запускается в старом проекте. .
Вот код, о котором идет речь:
void ProcessRecievedByte_Callback(object sender, byte rcvdByte)
{
this.BeginInvoke(new ES_UART.RxBufferRemoveByteEventHandler(ES_RxBufferProcessor), sender, rcvdByte);
}
void ES_RxBufferProcessor(object sender, byte e)
{
switch (receiveState)
{
case receive_state.WAITING_FOR_SOP:
if (e == '$')
{
receiveState = receive_state.IN_A_PACKET;
packetIndex = 0;
packetBuffer[packetIndex] = e;
packetIndex++;
}
break;
case receive_state.IN_A_PACKET:
if (packetIndex < MAX_PACKET_SIZE)
{
packetBuffer[packetIndex] = e;
packetIndex++;
}
if (e == '\n')
receiveState = receive_state.PACKET_RECIEVED;
break;
case receive_state.PACKET_RECIEVED:
break;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78794127/begininvoke-behavior-different-in-wpf-and-winforms[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия