Am 29.04.2013 16:15, schrieb Curtis Newton:
> ich starte einen BackgroundWorker folgenderma�en:
>
> using(BackgroundWorker bw = new BackgroundWorker())
> {
> bw.DoWork += new DoWorkEventHandler(saveBackground);
> bw.RunWorkerAsync();
> }
Also ich bin jetzt kein C#-Experte, aber dieses "using .." macht man
doch um deterministisches Cleanup-Verhalten zu bewirken. Was genau soll
denn das an dieser Stelle bewirken? Wenn der BackgroundWorker einen
Thread startet und Du dann auf den Thread wartest, dann kannst Du doch
auch gleich synchron die entsprechende Funktion aufrufen. Ansonsten ist
das using unnoetig. Guck' Dir zum Vergleich doch mal die Beispiele unter
http://msdn.microsoft.com/en-us/library/cc221403%28v=vs.95%29.aspx an.
> Wird jetzt der BackgroundWorker ordentlich wegger�umt? Nein, oder? Der
> DoWork-Eventhandler ist ja nicht null, und damit kann der Garbage
> Collector den BackgroundWorker nicht l�schen?
>
> Ist das so? Wie kann man das umgehen bzw. machen?
Ich glaube eher die Referenz zeigt in die andere Richtung, also der
BackgroundWorker hat eine Referenz auf den DoWorkEventHandler, nicht
umgekehrt. Dadurch wird hoechstens das Ziel des Eventhandlers am Leben
erhalten, in diesem Fall also die Instanz an die saveBackground
gekoppelt ist.
Gruesse aus Hamburg!
Uli