Асинхронная запись в SerialPort

80
04 мая 2021, 17:10

Всем привет. Есть небольшое приложение на WinForms, которое принимает значения и отправляет их по SerialPort. Приложение не большое и данные отправляются не часто, но все равно GUI зависает. Было принято решение сделать очередь из пакетов, добавляя их асинхронно и наблюдателя в новом потоке, который в бесконечном цикле отправлял бы значения из очереди. Реализация вышла следующей:

Наблюдатель за очередью пакетов

public Queue<string> Packages;
private void SendPackages()
{
    while (true)
    {
        if (Packages.Count == 0) continue;
        var package = Packages.Dequeue();
        Port.Write(package);
        Thread.Sleep(500);
    }
}

И асинхронное добавление пакетов в очередь:

public async Task AddPackage(string package)
{
    await Task.Run(() => Packages.Enqueue(package));
}

Теперь при отправке пакетов GUI не подвисает, но наблюдатель отправив несколько значений, не отправляет больше. Правильном ли я направлении мыслю? Если да, то как правильно это все реализовать. Если нет, то как лучше это все сделать?

READ ALSO
Не удалось разрешить ресурс в конструкторе

Не удалось разрешить ресурс в конструкторе

После одной из загрузок проекта с использованием MaterialDesign и CalcBinding в VS19 начались проблемы - а именно конструктор грузится очень долго, и после...

80
Работа с двумя мониторами Wpf MVVM

Работа с двумя мониторами Wpf MVVM

Можете подсказать, вот у меня есть 2 монитора и мне нужно по нажатию кнопки перенести окно WPF на другой монитор и при повторном нажатии кнопки...

69