Я пытаюсь создать приложение, которое связывается с оборудованием через последовательный порт и передает результаты в gui.Обновлен интерфейс C# GUI и асинхронный последовательный порт
В настоящее время через GUI выполняется KeyEvents, который запускает чертеж следующей «страницы» графического интерфейса пользователя. Однако на одном шаге (после нажатия клавиши) мне нужно нарисовать новую страницу и отправить несколько команд через последовательный порт.
Команда отсылка осуществляется с помощью:
port.Write(data, 0, data.Length);
Я тогда ждать ответа, ожидая DataReceivedHandler для запуска - это просто прикалывает, что есть ожидание данных, и данные обрабатываются в другом методе.
Сначала я только что положил отправку &, получив команду в функции, рисующей страницу после «отрезки», однако она застряла - данные передавались, но страница не была нарисована - она была заморожена.
Тогда я сделал метод асинхронной:
private async void SendData()
{
await Task.Run(() => serialClass.SendAndReceive(command));
// process reply etc.
}
, который используется так:
public void LoadPage()
{
image = Image.FromFile(path);
//do some stuff on image using Graphics, adding texts etc.
picturebox1.Image = image;
SendData();
}
Он отлично работает, но мне нужно «перезагрузить» страницу (позвонить еще раз LoadPage) , Если бы я сделать это внутри метода асинхронного так:
private async void SendData()
{
await Task.Run(() => serialClass.SendAndReceive(command));
// process reply etc.
LoadPage();
}
Тогда, очевидно, изображение не будет обновляться, хотя данные будут отправлены через последовательный порт. Возможно ли каким-либо образом проверить, была ли выполнена функция асинхронизации, и инициировать событие, в котором я мог бы перезагрузить страницу?
До сих пор я пытался использовать работу BackGroundWorker Complete и изменение свойств. Данные были отправлены снова, но изображение не было перезагружено. Любая идея, как я могу это достичь?
Заранее спасибо за помощь, С наилучшими пожеланиями
Прекратите использование 'асинхронной void', [он должен использоваться только для обработчиков событий] (https://msdn.microsoft.com/en-us/magazine/jj991977.aspx). –