3
모두 캡쳐 된 프레임을 WPF로 표시하려고합니다. 이미 이미지를 표시 할 수 있습니다. 하지만 이벤트 처리 방법을 알아낼 수 없습니까? WinForm에서는 Application.Idle이지만 WPF에서는 무엇을 사용해야합니까? 나는 이것을 thread 이미 보았다. 나는 그것을 만들 수 없었다.EMGU CV 카메라 캡처 (WPF)?
모두 캡쳐 된 프레임을 WPF로 표시하려고합니다. 이미 이미지를 표시 할 수 있습니다. 하지만 이벤트 처리 방법을 알아낼 수 없습니까? WinForm에서는 Application.Idle이지만 WPF에서는 무엇을 사용해야합니까? 나는 이것을 thread 이미 보았다. 나는 그것을 만들 수 없었다.EMGU CV 카메라 캡처 (WPF)?
왜 Timer.Elapsed 이벤트를 사용할 수 없습니까?
작업자 스레드에서 경과 콜백이 발생하므로 UI를 업데이트 할 수 없게됩니다. 따라서 SynchronizationContext를 사용하여 UI 업데이트 작업을 적절한 스레드로 보내야합니다.
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//...
this.Dispatcher.Hooks.DispatcherInactive += new EventHandler(Hooks_DispatcherInactive);
}
void Hooks_DispatcherInactive(object sender, EventArgs e)
{
using (Image<Bgr, byte> frame = capture.QueryFrame())
{
if (frame != null)
{
using (var stream = new MemoryStream())
{
// My way to display frame
frame.Bitmap.Save(stream, ImageFormat.Bmp);
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = new MemoryStream(stream.ToArray());
bitmap.EndInit();
webcam.Source = bitmap;
};
}
}
}
어쩌면 더 나은 솔루션이 두 방법을 결합하는 것입니다 : 디스패처 활동을 수신하지만, 프레임을 렌더링하지 않는 모든 UI 작업이 디스패처 통과로
또는, 당신은 DispatcherInactive 이벤트에 반응 할 수 일정 기간이 경과 할 때까지 –
Timer_Elapsed 함수는 어떻게 호출됩니까? – Jonathan
Elapsed 이벤트가있는 Timer 클래스를 사용하여 타이머를 설정했습니다. https://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.110).aspx –