Всем привет. Есть небольшое приложение на 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 не подвисает, но наблюдатель отправив несколько значений, не отправляет больше. Правильном ли я направлении мыслю? Если да, то как правильно это все реализовать. Если нет, то как лучше это все сделать?
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости