Verständnisfrage neue Instanzen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Verständnisfrage neue Instanzen

    Hallo, ich habe folgenden Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private WithEvents bgw As System.ComponentModel.BackgroundWorker
    2. Private Sub bgw_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bgw.DoWork
    3. End Sub
    4. Private Sub bgw_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles bgw.ProgressChanged
    5. End Sub
    6. Private Sub bgw_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgw.RunWorkerCompleted
    7. End Sub
    8. btn_Start
    9. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btn_Start.Click
    10. bgw = New System.ComponentModel.BackgroundWorker() With {.WorkerReportsProgress = True, .WorkerSupportsCancellation = True}
    11. bgw.RunWorkerAsync()
    12. End Sub


    Wenn ich nun zb. 3 mal auf den Starten Button drücke, wären es dann 3 verschiedene Instanzen des Backgroundworkers, die die selben Handler verwenden (bzw eigene davon), oder wäre das ein BackgroundWorker, der immer wieder gekillt wird, weil er eine neue Instanz zugewiesen bekommt?

    Stehe gerade n bisschen aufm Schlauch, ggf. bin ich auch wieder zu lange dran :P..!

    Danke schonmal!
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    jo, das wären 3 Backgroundworker.
    Allerdings nur derjenige, der tatsächlich der WithEvents-Variablen zugewiesen ist, dessen Events werden auch behandelt.
    Die annern beiden hängen bischen in der Luft.

    Dir ist schon klar, dass man so mit Backgroundworkern nicht umspringt, ja?
    Das ist eine Komponente, die zieht man am besten aus der Toolbox aufs Form.

    Noch besser ist, ihn garnet zu benutzen, weil BGW ist nicht typisiert, und daher ist der Daten-Transfer ziemlich krampfhaft.
    Gugge codeproject.com/Articles/60382…ackgroundWorker-and-about

    ErfinderDesRades schrieb:

    Die annern beiden hängen bischen in der Luft.
    Da bin ich mir nicht ganz sicher.
    Im GC ist bei Erstellung einer neuen Instanz die alte Instanz "ohne Verwendung", möglicherweise wird die vom GC deswegen bei Gelegenheit disposed. Das müsste echt mal untersucht werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    jo, kann sein, dass der GC das gelegentlich disposed.
    Aber nachprüfen muss man da nix, denn so geht man einfach nicht mit um, weder mit Komponenten noch mit Withevents-Variablen.

    Was du dir angugge kannst ist das dekompilierte IL, wo du siehst, dass sich hinter einer WithEvents-BindingSource eine Property verbirgt, die im Setter fein säuberlich alle Events der vorherigen BindingSource removed, und die Events der neuen BindingSource added.