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:
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.
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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.