Laden...

NullReferenceException aber keine Null Objekte

Erstellt von Crone vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.194 Views
C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 8 Jahren
NullReferenceException aber keine Null Objekte

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.

16.834 Beiträge seit 2008
vor 8 Jahren

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.

C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 8 Jahren

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

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

Danke.

Real programmers don't comment their code - it was hard to write, it should be hard to understand.