Laden...

Schließen der Form schmeißt Exception, funktionierte vorher, habe nichts geändert.

Letzter Beitrag vor 12 Jahren 5 Posts 812 Views
Thema geschlossen
Schließen der Form schmeißt Exception, funktionierte vorher, habe nichts geändert.

Hallo,

ich habe ein Problem in meiner Form spiele ich einen Film ab wenn dieser zu Ende ist soll sich die Form von alleine schließen funktionierte auch soweit doch nun auf einmal nachdem ich an anderen Stellen des Programms weiterentwickelt habe trat der Fehler beim beenden eines Videos auf...

Es handelt sich um diese Methode:

   private void VideoPlayer_MediaPlayerEndReached(object sender, EventArgs e)
        {
            this.Close();
        }

und folgendes wird gemeldet:

Fehlermeldung:
Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement VideoForm erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.

Ich verstehe nicht was auf einmal anders ist.

Hoffe mir kann jemand helfen!

Die Dose

Ein guter Rat ist nur ein guter Rat für den, der ihn braucht.

Hallo,

das Problem ist dass du von einem anderen Thread auf der GUI irgendwas änderst.
Dadurch wird diese Exception ausgelöst.

Guck mal hier: [FAQ] Warum blockiert mein GUI? und [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)

Es kann auch sein dass du nicht direkt selbst die Threads verwendest. Aber falls von deinem Film-Control ein Event im nicht GUI Thread ausgelöst wird, dann bist du schon im falschen Thread unterwegs.
Deshalb musst du einfach über Invoke den Thread wechseln

Gruß
Michael

Das versteh ich nicht, wie kann denn das sein?

Ich habe eine Haupt Form in der kann ich das video starten, dadurch wird die zweite Form geöffnet in der das Video abgespielt wird das ganze läuft über eine Controller Klasse.

Wenn ich in der Haupt Form die zweite Form durch die Methode im Controller schließe funktioniert es.

Kommt aber das Event was AUCH über die Controller Klasse genau mit der selben Methode, die Form schließen soll kommt die Exception...

public void CloseVid()
        {
            if (VidForm != null)
            {
                VidForm.Close();
               // try
               // {
               //     VidForm.ClearPLaylist();
               // }
               // catch { }
            //}
            //VidForm = new VideoForm(this);
        }

Ich seh da keinen Unterschied oO

Ein guter Rat ist nur ein guter Rat für den, der ihn braucht.

Kommt aber das Event was AUCH über die Controller Klasse genau mit der selben Methode

Das sagt aber nichts über den Thread aus, in dem der Aufruf erfolgt. Es kommt eben darauf an, wer wie das Event auslöst und nicht wo der Quelltext steht. Auch "aus der Hauptform" ist damit keine Garantie, dass es nicht zu einer solchen Exception kommt.

Hallo Die Dose,

im StackTrace steht, welche Anweisung die Exception auslöst. Diese Anweisung wird vom falschen Thread ausgeführt. Wie du die Ausführung in den richtigen Thread verlagerst, steht in der FAQ, in der auch sonst alles steht, was man in dem Zusammenhang wissen muss.

herbivore

Thema geschlossen