У меня есть приложение, над которым я работаю в 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#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение