Laden...

BackgroundWorker - UserState Objekt übergeben

Erstellt von Viper2000 vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.460 Views
V
Viper2000 Themenstarter:in
63 Beiträge seit 2008
vor 14 Jahren
BackgroundWorker - UserState Objekt übergeben

Hallo,

ich nutze in meinem Projekt einen BackgroundWorker und würde gerne im ReportProgress neben dem Progress in % auch noch einen String und eine boolsche Variable im Userstate mitgeben. Dazu habe ich mir folgende Klasse angelegt:

namespace XYZProjekt
{
    class UserStateObject
    {
        public string message;
        public bool success;
    }
}

im ProgressChanged Eventhandler des Backgroundworkers mache ich dann prinzipiell folgendes:

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            this.progressBar1.Value = e.ProgressPercentage;            
            UserStateObject uso = (UserStateObject)e.UserState;
            this.textBox1.Text = uso.message;
            this.checkBox1.Checked = uso.success;
        }

jetzt muss ich aber immer bei jedem GUI Zugriff des Backgroundworkers(und das sind sehr viele) eine Instanz von der Klasse UserStateObject erzeugen und diese dann füllen und übergeben.

Geht das nicht irgendwie einfacher? Also ohne jedesmal eine neue Instanz von UserStateObject zu erzeugen?

Viele Grüße

L
416 Beiträge seit 2008
vor 14 Jahren

this.textBox1.Text = ((UserStateObject)e.UserState).message;
this.checkBox1.Checked = ((UserStateObject)e.UserState).success;

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Viper2000,

nach meinem Verständnis sollte es nur ein UserState-Objekt geben. Ich verstehe nicht, warum du meinst, dass du jedesmal ein neues erzeugen musst. Stattdessen solltest du in das bestehende Objekt den aktuellen Zustand schreiben.

herbivore

V
Viper2000 Themenstarter:in
63 Beiträge seit 2008
vor 14 Jahren

Hallo,

habs jetzt so gemacht: also ich hab das Objekt jetzt nur einmalig in meiner Basisklasse erzeugt und fülle dieses Objekt jeweils in den abgeleiteten Klassen und stopfe es in den ReportProgress. Funktioniert wunderbar 😃

Thx