c# - BackgroundWorker aufraeumen

29/04/2013 - 16:15 von Curtis Newton | Report spam
Hallo,

ich starte einen BackgroundWorker folgendermaßen:

using(BackgroundWorker bw = new BackgroundWorker())
{
bw.DoWork += new DoWorkEventHandler(saveBackground);
bw.RunWorkerAsync();
}

...
private void saveBackground(object sender, DoWorkEventArgs e)
{
// Demo
}

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?

C.
 

Lesen sie die antworten

#1 Ulrich Eckhardt
30/04/2013 - 08:55 | Warnen spam
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/lib...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

Ähnliche fragen