Поведение BeginInvoke отличается в WPF и WinFormsC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Поведение BeginInvoke отличается в WPF и WinForms

Сообщение 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;
}
}


Подробнее здесь: https://stackoverflow.com/questions/787 ... d-winforms
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Поведение BeginInvoke отличается в WPF и WinForms
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Dispatcher.BeginInvoke() без ожидания все еще выполняется асинхронно?
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Реализация Delegate.BeginInvoke()/EndInvoke()
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Могу ли я переключаться между двумя потоками управления. Begininvoke?
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Чем программирование WinForms на Visual C++/C# отличается от программирования Windows на Visual C++(MFC)
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»