Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Exception bei Marshal.ReleaseComObject
AlfameisterT
myCSharp.de - Member



Dabei seit:
Beiträge: 154

Themenstarter:

Exception bei Marshal.ReleaseComObject

beantworten | zitieren | melden

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.



.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo AlfameisterT,

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

herbivore
private Nachricht | Beiträge des Benutzers
AlfameisterT
myCSharp.de - Member



Dabei seit:
Beiträge: 154

Themenstarter:

beantworten | zitieren | melden

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


.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
AlfameisterT
myCSharp.de - Member



Dabei seit:
Beiträge: 154

Themenstarter:

beantworten | zitieren | melden

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 ?


.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo AlfameisterT,
Zitat
Was bewirkt das Attribute eigentlich beim Compiler ?

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

herbivore
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4.221
Herkunft: Zentralschweiz

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
AlfameisterT
myCSharp.de - Member



Dabei seit:
Beiträge: 154

Themenstarter:

beantworten | zitieren | melden

@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...



.
private Nachricht | Beiträge des Benutzers