C# Win Forms: ожидание в цикле пользовательского интерфейса с помощью Thread.Sleep не позволяет асинхронной задаче (не оC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 C# Win Forms: ожидание в цикле пользовательского интерфейса с помощью Thread.Sleep не позволяет асинхронной задаче (не о

Сообщение Anonymous »

Мне не хватает важной концепции, и я был бы очень признателен за помощь. Надеюсь, я смогу правильно описать свою проблему, я новичок в том, чтобы публиковать сообщения на форумах и просить о помощи.
У меня есть асинхронная задача в классе камеры, которая передает растровое изображение из потока RTSP в Picture Box в моем пользовательском интерфейсе.
Я использую Safe Fire and Forget, когда запускаю задачу потоковой передачи, чтобы продолжить работу с потоком пользовательского интерфейса.
Я не хочу, чтобы во всей форме присутствовали ожидания и асинхронность. , он стал неуправляемым и мешал другим потокам. Пользовательский интерфейс отзывчив и работает хорошо.
Теперь я подписываюсь на событие SnapShotTaken в классе Camera, когда хочу сделать снимок. Затем я вызываю функцию класса Camera, чтобы сообщить ей, что нужно начать делать снимок (устанавливая логическую переменную), а затем я хочу, чтобы поток пользовательского интерфейса ждал, пока событие не будет запущено в моей форме.
Я используя цикл с Thread.Sleep в пользовательском интерфейсе, который затем блокирует пользовательский интерфейс и класс камеры!
Как я могу дождаться обратного вызова и позволить классу камеры продолжить свою работу (что Я предполагал, что нахожусь в фоновом потоке, так как не ждал этого), чтобы подать мне сигнал, не блокируя работу класса Camera?
Вот код для подписки на класс Camera (ThisFormIPCamera ) из события нажатия кнопки

Код: Выделить всё

    ThisFormIPCamera.SnaphotTaken += ThisFormIPCamera_RegSnaphotTaken;
ThisFormIPCamera.TakeSnapshot();
Вот код TakeSnapshot в классе Camera, который просто устанавливает переменную, сообщающую классу Camera
снять следующий полученный кадр и отправить его обратно мне.
Вот код TakeSnapshot в классе Camera, который просто устанавливает переменную, чтобы сообщить классу Camera
чтобы сделать следующий полученный кадр и отправить его обратно мне.
р>

Код: Выделить всё

    public void TakeSnapshot()
{
_takeSnapshot = true;
}
Код в пользовательском интерфейсе, который нужно ждать, что явно нехорошо:

Код: Выделить всё

    int timeoutCounter = 0;
while (!RegPhotoTaken)
{
try
{
System.Threading.Thread.Sleep(200);
}

timeoutCounter++;
if (timeoutCounter > 50)
{
MessageBox.Show("Timeout", GlobalVars.APP_NAME, MessageBoxButtons.OK)
break;
}
}
Время ожидания этого кода истекает, и только с помощью MessageBox код класса Camera продолжает работать, и я получаю свое изображение.
Что я могу использовать? не позволит выполнить код пользовательского интерфейса, но разрешит выполнение задачи в классе камеры.
Спасибо!
Я попробовал запустить используя async и await для функций, которые содержат вызовы для подписки на событие в классе Camera, но это стало очень сложным во всей форме, и моя аналоговая камера давала проблемы.
Я пытался установить флаги, чтобы остановить работу других потоков , но мне хотелось бы более чистое решение, если это возможно.

Подробнее здесь: https://stackoverflow.com/questions/785 ... -not-allow
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Любая разница между kernel32.dll Sleep и Thread.Sleep()
    Anonymous » » в форуме C#
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Android 13 планшет предотвращает WebSocket в WebView Densonce на экране Sleep Sleep
    Anonymous » » в форуме Android
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Тестирование с помощью Thread.sleep
    Гость » » в форуме JAVA
    0 Ответы
    39 Просмотры
    Последнее сообщение Гость
  • Тестирование с помощью Thread.sleep
    Гость » » в форуме JAVA
    0 Ответы
    40 Просмотры
    Последнее сообщение Гость
  • Как работает опрос с помощью thread.sleep()?
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»