У меня есть обработчик событий (из таймера), который перерисовывает каждые x миллисекунд.проверка завершения метода async void
Хотя, по-видимому, не рекомендуется использовать методы async void, это, по-видимому, неверно для обработчиков событий, так как разработчик не вызывает их из других методов.
Моя проблема Я заметил, что когда процессор имеет большую рабочую нагрузку (фоновые задачи и т. Д.), Выполняются перекрывающиеся вызовы для перерисовки.
Мне удалось обойти это, установив флаг (переменная bool), чтобы указать, что чертеж завершен (и не вызывает мой метод draw, если этот флаг не является истинным), но я слышал, что приложения для хранения в Windows могут быть отклонен для опроса в асинхронной деятельности.
private void _timer_Tick(object sender, object e)
{
if (drawingFinished == true)
{
drawingFinished = false;
// drawingFinished set to true at the end of this method
DrawVideoFrame();
}
}
Кроме того, вы не можете добавлять блокировки для асинхронных методов.
Что является лучшей практикой здесь? Как мне это сделать?
Это не отвечает на ваш вопрос, но вместо использования логического флага вы можете просто кэшировать задачу и проверить, завершено ли она. Что на самом деле делает DrawVideoFrame? –
Интересная идея, pm_2. Я думаю, что я не смог бы получить задачу до тех пор, пока метод, возвращающий задачу, не завершится. – micahhoover
Нет - вы можете просто создать задачу как переменную и использовать ее позже в потоке процесса. –