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
NullReferenceException aber keine Null Objekte
Crone
myCSharp.de - Member



Dabei seit:
Beiträge: 168

Themenstarter:

NullReferenceException aber keine Null Objekte

beantworten | zitieren | melden

Hallo zusammen,

ich hab ein Tool welches mehrere unbekannte DLLs laden kann, die aber mit meinem Interface übereinstimmen müssen.

In einen Eigenen Thread werden die DLL's geladen und mehrere Funktionen werden aufgerufen.
Nun kommt es aber ab und zu vor (Ja nicht immer, bei ca. 1 von 5 Programm-Starts), dass wenn ich die Rückgabewerte in einen Dictionary einfüge eine NullReferenceException auftritt.

Was wirklich interessant ist das:
1. Die NullReferenceException nur ab und zu kommt -> Der Programmablauf ist aber vollkommen identisch und ein User kann noch nicht eingreifen, da der Code mit dem Form_Load Event ausgeführt wird.
2. Wenn ich die Variablen mir anschaue ist keine der Variablen NULL.
3. Ich füge vier Rückgabewerte in vier verschiedene Dictionaries ein und der Fehler scheint bei einen beliebigen Dictionary aufzutreten... mal ist es das erste, dann wieder das dritte.


                if (plugin != null)
                {

                    if (!plugins.ContainsKey(FileName))
                        plugins.Add(FileName, plugin); //Fehler hier 

                    if (!pluginInfos.ContainsKey(FileName))
                        pluginInfos.Add(FileName, plugin.GetPluginInfo()); //Fehler hier 


                    if (!pluginButtonTexts.ContainsKey(FileName))
                        pluginButtonTexts.Add(FileName, plugin.GetButtonText()); //Fehler hier 

                    Control c = plugin.GetControl();
                    if (!pluginControls.ContainsKey(FileName))
                        pluginControls.Add(FileName, c); //Fehler oder hier 
}

Mir ist vollkommen schleierhaft wie ich eine Exception bekommen kann wenn keiner der Werte NULL ist.

ich hoffe jemand von euch hat eine Idee woran es liegen könnte, den ich könnte nach ewigen Debuggen nichts entdecken.

Gruß Crone
Real programmers don't comment their code - it was hard to write, it should be hard to understand.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.389

beantworten | zitieren | melden

Spricht für eine Race-Condition; Du also das Multi-Threading nicht im Griff hast.
Evtl. fehlen locks an den entsprechenden Stellen.

Dahingehend ein Hinweis, dass ein Dictionary nicht Thread-sicher ist - und ich seh hier zumindest keine locks, wo sie sein sollten, wenn plugins ein Dictionary ist.
private Nachricht | Beiträge des Benutzers
Crone
myCSharp.de - Member



Dabei seit:
Beiträge: 168

Themenstarter:

beantworten | zitieren | melden

Genau das dachte ich mir auch als ich fertig war mit schreiben.
Ein paar locks später und alles funktioniert :D

Ich denk bei Dictionaries nie daran das diese nicht Thread-safe sind :(

Danke.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Crone am .
Real programmers don't comment their code - it was hard to write, it should be hard to understand.
private Nachricht | Beiträge des Benutzers