Beim Versuch, mit Emgu Bilder von einer Webcam zu erfassen, bin ich auf ein Problem gestoßen. Um diese Aufgabe zu tun, verwendet Emgu unmanaged opencv Bibliotheken. Das Problem ist also, dass ich meine GUI (WPF-Bild-Steuerelement) von System.Timers.Timer Elapsed Ereignis nicht aktualisieren kann. Ich weiß, es läuft in verschiedenen Threads, aber hey, das ist, warum ich einen Dispatcher verwenden. Es ist das erste Mal, dass ich es nicht mit Dispatcher tun kann. Ich erhalte eine InvalidOperationException mit "Der aufrufende Thread kann nicht auf dieses Objekt zugreifen, da es einem anderen Thread gehört. Ich habe den ganzen Tag damit verbracht, nach einer Lösung zu suchen, konnte es aber immer noch nicht beheben. Irgendwelche Ideen, warum das passiert?
webcam.OnNewFrame += newBitmapSource => this.imgCaptured.Dispatcher.Invoke
(
new Action(delegate
{
this.imgCaptured.Source = newBitmapSource;
}),
DispatcherPriority.Background
);
Der letzte Punkt auf Stack Trace ist: System.Windows.Threading.Dispatcher.VerifyAccess()
Wenn ich jedoch Dispatcher.CheckAccess() aufrufe, wird true zurückgegeben.
UPDATE:
Schließlich habe ich es selbst herausgefunden: die BitmapSource musste im UI Thread erstellt werden. Es scheint, als ob dieses Objekt sonst nicht verwendet werden kann.