Всем привет. Есть небольшое приложение на 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 не подвисает, но наблюдатель отправив несколько значений, не отправляет больше. Правильном ли я направлении мыслю? Если да, то как правильно это все реализовать. Если нет, то как лучше это все сделать?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
После одной из загрузок проекта с использованием MaterialDesign и CalcBinding в VS19 начались проблемы - а именно конструктор грузится очень долго, и после...
Версия Unity:Unity 56
Можете подсказать, вот у меня есть 2 монитора и мне нужно по нажатию кнопки перенести окно WPF на другой монитор и при повторном нажатии кнопки...