Как написать AVI из Callback, сохранить отзывчивость интерфейса и ждать завершения

Я должен использовать SDK камеры для микроскопа, который поставляется с примером приложения Windows Forms на C#. Функции SDK импортируются в приложение через DLLImport. В этом примере приложения отдельные кадры с камеры считываются из ОЗУ с помощью функции обратного вызова. Эта функция обратного вызова затем обновляет PictureBox для отображения живого изображения.

Однако для моего использования я хочу не только показывать кадры, но и записывать их. Я думаю, что самый простой способ сделать это с помощью SharpAvi. Однако я не знаю, как инициализировать AviWriter (очевидно, я не могу инициализировать его каждый раз, когда вызывается обратный вызов), а затем добавить отдельные кадры в поток из функции обратного вызова.

На данный момент я решил свою проблему с помощью другой функции, которая ожидает в отдельном потоке, чтобы общественный счетчик пошел вверх - сам счетчик обновляется в функции обратного вызова. Каждый раз, когда счетчик обновляется, эта функция затем также считывает фрейм из ОЗУ и добавляет его в AviWriterStream. В довершение всего я должен был сделать так, чтобы поток блокировал мой пользовательский интерфейс, используя

var resetEvent = new ManualResetEvent(false);

System.Threading.ThreadPool.QueueUserWorkItem(delegate
{

    WriteAVI()
    resetEvent.Set();

}, null);

resetEvent.WaitOne(); 

Это связано с тем, что мне нужно записать несколько видео в разных позициях XY - поэтому каждый раз, когда мой цикл for достигает новой позиции XY, запись запускается, и я должен убедиться, что переходить на следующую позицию только после записи на самом деле закончено.

Мой способ сделать это, очевидно, хакерская и очень плохая практика (я уже чувствую себя плохо, но просто не знаю лучше), и мне интересно, каким будет правильное решение. Пока это работает - просто заморозка пользовательского интерфейса действительно раздражает.

Изменить: Это, вероятно, два вопроса: 1) Как правильно записать кадры в AVI и 2) Как ждать завершения записи, не заставляя ее заморозить мой интерфейс

0 ответов

Другие вопросы по тегам