3 Stimmen

WPF GUI kann nicht aktualisiert werden, während nicht verwaltete Bibliotheken im Hintergrund verwendet werden

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.

1voto

Priyank Punkte 10303

Haben Sie versucht, ihn auf Nicht-Hintergrund-Thread einzustellen. Ich frage mich, ob das ein Problem ist - die Aktualisierung der Benutzeroberfläche vom Hintergrund-Thread.

Außerdem heißt es, dass Sie Bitmap-Ressourcen einfrieren müssen, bevor Sie versuchen, sie über verschiedene Threads - Worker-Thread und UI-Thread - zu teilen. Siehe untenstehende Links.

WPF Dispatcher {"Der aufrufende Thread kann nicht auf dieses Objekt zugreifen, da es einem anderen Thread gehört."}

http://social.msdn.microsoft.com/Forums/en-US/windowswic/thread/9223743a-e9ae-4301-b8a4-96dc2335b686

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X