Я хочу делать снимки с веб-камеры в Windows с помощью DirectShow.Эти снимки будут сохранены на диск без отображения этих изображений.Я хочу запустить процесс снимка, который делает снимок каждую секунду, пока я не остановлю его, пока основной процесс продолжается.
Поэтому я выбираю И еще один элемент управления веб-камерой для DirectShow, чтобы использовать его сC #, и демонстрация работает нормально.
Но у меня возникла проблема, когда я использую обертку в своей задаче, я получаю типичную ошибку потоков The calling thread cannot access this object because a different thread owns it.
Код вызова выглядит так:
Task.Run(() =>
{
using (var cam1 = new SnapshotCam(camList.First(), "person", webCameraControl))
{
// Act
Bitmap image = null;
if (!cam1._wcc.IsCapturing)
{
cam1._wcc.StartCapture(cam1._cameraId);
Task.Delay(500).Wait();
}
image = cam1._wcc.GetCurrentImage();
// Assert
Assert.NotNull(image);
}
}).Wait();
Трудным для меня объектом является webCameraControl
, хранящийся в cam1._wcc
: этот объект наследуется от System.Windows.Controls.UserControl
и может быть присоединен к пользовательскому интерфейсу.Но в моем случае у меня нет никакого пользовательского интерфейса, снимки должны быть сделаны в «безголовом» стиле.
Так что проблема начинается, когда я хочу использовать _wcc
-объект.Я уже пытался вызвать _wcc.Dispatcher
для соответствующего потока, но не удалось.
Как я могу вызвать приведенный выше код в собственной задаче / потоке, независимом от остальной части кода?