Picturebox bekommt ein großes rotes X, aber ich kann es nicht erkennen oder beheben

8

Ich arbeite gerade mit AForge und habe ein neues Frame-Event, das den Frame als Bitmap in eine Picturebox stellt. In 90% der Fälle funktioniert es großartig ... WENN ich mit etwas an der Winform herumspiele. Wenn Sie ein Kombinationsfeld ändern, das Fenster verschieben oder ähnliches, besteht die Gefahr, dass die Picturebox vom Video auf ein großes rotes X-Code-Beispiel umschaltet:

%Vor%

Ich habe eine Pause auf dem if (videoPictureBox1.Image == videoPictureBox1.ErrorImage) gesetzt und es wird falsch ausgewertet, auch wenn das große rote X oben ist, weil das Bild tatsächlich auf die Bitmap gesetzt wird. Also cam.Stop () und cam.Start () laufen nie (nicht sicher, ob das überhaupt helfen würde, aber ich dachte, ich würde es versuchen).

videoPictureBox1.Refresh () wird jedes Mal ausgeführt, aber es macht keinen Unterschied. Habe immer noch das große rote X.

Wie ich schon sagte: Wenn ich das Video starte und nichts anfasse, wird das große rote X niemals passieren. Aber in dem Moment, in dem ich anfange, die Kombinationsfelder zu wechseln oder das Formular selbst zu ziehen, steigt die Wahrscheinlichkeit des großen roten X exponentiell an. Manchmal kann ich das Kombinationsfeld 10-12 mal durchblättern, bevor es passiert, manchmal passiert es das zweite Mal, dass ich auf die Combobox klicke. : - \

Kann jemand erklären, was hier vor sich geht und vielleicht einen Vorschlag für die beste Methode machen, um das Problem zu beheben? Ich bin immer noch sehr neu im Threading, also habe ich mich angestrengt, genau den Überblick zu behalten, was hier passiert und wie ich das Problem am besten lösen kann! Jede Bewegung in die richtige Richtung wäre eine große Hilfe!

    
C Smith 17.04.2013, 13:13
quelle

4 Antworten

6

Am Ende habe ich ALLES in den Handle_New_Frame in einem Aufruf eingewickelt. Es hat das große rote X-Problem dauerhaft komplett beseitigt. & gt; _ & gt;

%Vor%     
C Smith 22.04.2013, 19:41
quelle
3

Shawn Hargreaves hat eine ausgezeichnete, prägnante write-up vom" großen roten X des Schicksals ". Ich fand es sehr hilfreich im allgemeinen Fall, wenn WinForm-Komponenten plötzlich das rote "X" zeigen.

Zusammenfassend:

  • Dies wird durch ein Steuerelement verursacht, das eine Ausnahme aus dem OnPaint -Ereignis auslöst.
  • Sobald es geworfen wird, wird dieses Steuerelement weiterhin das rote X anzeigen und die Auslösung überspringen OnPaint.
  • Um zu debuggen, setze den Debugger so, dass er Common Language Runtime-Exceptions abfängt, und mache dann, was du normalerweise tust, um das rote X zu erhalten. Der Debugger stoppt genau dort, wo du vorkommst verhindere es.
Mark Meuer 22.04.2015 21:26
quelle
1

Verwenden Sie den Klon an Stellen, an denen Sie die Bitmap verwenden. Ex :

%Vor%     
Rsouza 18.04.2013 19:37
quelle
0

Um es zusammenzufassen: Dies ist ein getestetes Minimum, das für mich kein rotes Kreuz zeigt, selbst wenn die Größe geändert, gestartet, gestoppt oder die Auflösung geändert wurde.

%Vor%

Bitte beachten Sie, dass wir videoSource.Start () aufrufen; aus dem GUI- (creation) -Thread, aber der Call-Back-Handler (Handle_Very_New_Frame) wird vom Video-Thread (workers) aufgerufen.

Ich denke, deshalb brauchen wir sowohl das Invoke als auch das neue Bitmap, also wird das neue bmp auch aus dem GUI-Thread generiert. Aber ich rate nur hier, weil ich keinen Beweis finden konnte.

    
Xan-Kun Clark-Davis 11.03.2017 19:44
quelle