Laden...

Exception bei Marshal.ReleaseComObject

Erstellt von AlfameisterT vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.459 Views
A
AlfameisterT Themenstarter:in
154 Beiträge seit 2005
vor 18 Jahren
Exception bei Marshal.ReleaseComObject

Hallo,

ich bin am Verzweifeln...
Ich benutze ein COM Object welches in einer c# Klasse gekapselt wird.

Jetzt habe ich das Problem das ich eine ExecutionEngineException bekomme wenn ich dieses Object zerstöre.

Wird ein Object vom Hauptthread der Anwendung erzeugt und dann freigegeben gibt es keine Exception.
Wird ein Object von einem anderen Thread erzeugt und zerstört wird, kommt eben diese Exception. Spätestens dann wenn die Anwendung beendet wird.

Ich vermute das ich bei dieser Methode Marshal.ReleaseComObject() den Fehler bekomme. Vermutung deshalb, denn bei mehreren Thread funktioniert das mit dem Debuggen nicht richtig.

.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo AlfameisterT,

kingt mir danach, dass du [MTAThread] statt [STAThread] vor's Main schreiben muss (ungetestet).

herbivore

A
AlfameisterT Themenstarter:in
154 Beiträge seit 2005
vor 18 Jahren

Also mit diesem Attribut scheine es kein Problem mit dem COM mehr zu geben.
Danke, und ich bin schon Stunden am Fehler suchen...

Jetzt hat sich aber ein neues Problem aufgetan.
Wird eine Form.Close() Methode von einem anderen Thread als Erzeuger geschlossen gibts ne Exception. Det war vorher noch nicht...

Naja da heißt wohl noch bischen weiter suchen 🤔

.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo AlfameisterT,

wenn du von eim Thread auf ein Control (also auch ein Form) zugreifen (hier also schließen) willst, dass von einem anderen Thread erzeugt wurde, musst du Control.Invoke bzw. .BeginInvoke benutzen.

herbivore

A
AlfameisterT Themenstarter:in
154 Beiträge seit 2005
vor 18 Jahren

Danke,

das hatte ich eigentlich bedacht, nur beim Schließen hatte ich das vergessen.
Aber mit dem Schalter komme ich auch nicht recht weiter.

Bekomme ständig nicht nachvollziebare Threading Probleme.
Meistens beim Beenden der App. Obwohl ich vorher schön brav alle Threads beende.
Irgendwas stimmt da nicht...

Lasse ich das Attribute ganz weg, dann läufts. Zumindest bis jetzt 😉

Was bewirkt das Attribute eigentlich beim Compiler ?

.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo AlfameisterT,

Was bewirkt das Attribute eigentlich beim Compiler ?

Meinst du [MTAThread]? Das sagt dir bereitwillig die SDK-Doku (MTAThreadAttribute-Klasse) 🙂

herbivore

4.221 Beiträge seit 2005
vor 18 Jahren

Fragst Du beim ReleaseComObject den Returnvalue ab ?

Ev. werden nicht alle Referenzen zerstört und es kracht dann weil das ComObject nicht released werden kann...

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

A
AlfameisterT Themenstarter:in
154 Beiträge seit 2005
vor 18 Jahren

@Programmierhans

ne, aber ne gute Idee. Werde ich machen. Aber loswerden muss ich diese Bindung ja trotzdem 🤔

Haha, jetzt mußte ich feststellen wenn die Main nicht als STAThread definiert ist, dann funktioniert die Klasse FolderBrowserDialog nicht mehr.
Da wird doch der Hund in der Pfanne verrückt.
Ich kapier nichts mehr...

.