3
すべて私はWPFでカメラキャプチャフレームを表示しようとしています。私はすでに画像を表示することができます。しかし、イベント処理メソッドを把握することはできませんか? WinFormではApplication.Idleですが、WPFで何を使用する必要がありますか?私はこれを見ましたthread ..私はそれを作ることができませんでした。WPFでEMGU CVカメラキャプチャ?
すべて私はWPFでカメラキャプチャフレームを表示しようとしています。私はすでに画像を表示することができます。しかし、イベント処理メソッドを把握することはできませんか? WinFormではApplication.Idleですが、WPFで何を使用する必要がありますか?私はこれを見ましたthread ..私はそれを作ることができませんでした。WPFでEMGU CVカメラキャプチャ?
なぜ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 –