2017-12-19 2 views
-1

Mein Background doWork ‚s Ereignis hat viele Codes es execute.Is möglich, den Beschriftungstext nach jedem Code zu ändern ausgeführt wird?Bezeichnung ändern Text von Background DoWork WPF VB.NET

Zum Beispiel:

 Dim con As New SqlConnection("Data source=" & My.Settings.ip & "," & My.Settings.port & ";Network Library=DBMSSOCN;initial catalog=offpodb;User id=" & My.Settings.username & ";Password=" & My.Settings.password & ";") 
    con.Open() 
    If connected.Dispatcher.CheckAccess Then 
     connected.Content = "text" 
    Else 
     ' i dunno what to use here as it is not the same as WinForms 
    End If 

Was ist zu tun?

ODER

Bitte helfen Sie mir zu WPF VB.NET diese C# -Code zu konvertieren

Label1.Invoke((MethodInvoker)delegate { 
Label1.Text = i.ToString() + "Files Converted";}); 

Antwort

1

Sie sollten nicht die Benutzeroberfläche in der DoWork Methode aktualisieren.

Rufen Sie ReportProgress in Ihrer Methode DoWork nach jeder Aufgabe abgeschlossen ist. Stellen Sie die Nachricht, die Sie im UserState Parameter angezeigt werden sollen.

Dann behandeln Sie das ProgressChanged Ereignis in Ihrem Formular, extrahieren Sie die Nachricht von e.UserState und verwenden Sie es, um Ihr Etikett zu aktualisieren.

Denken Sie daran, wie der Hintergrund-Mitarbeiter eine Nachricht senden, indem Sie ReportProgress anrufen, und Ihr Hauptformular die Nachricht erhalten, indem Sie ProgressChanged behandeln.

+0

gut, wie soll ich 'ReportProgress' verwenden, wie ich den Etikettentext ändern möchte, nachdem jede Aufgabe in' DoWork' Ereignis abgeschlossen ist? Wie bereits erwähnt, haben meine bgworker viele Aufgaben, und ich will den Beschriftungstext ändern, nachdem jede task..how das zu tun? –

+3

Sie rufen 'ReportProgress' nach jeder Aufgabe abgeschlossen ist. Die Argumente sind der Fortschritt in Prozent und ein beliebiger Benutzerstatus. Sie können alles passieren, z.B. Null, für die Prozent und ignorieren sie nur im 'ProgressChanged' Event-Handler. Der Benutzerstatus kann alles sein. In Ihrem Fall würde ich vorschlagen, dass Sie den Text übergeben, der im "Label" angezeigt werden soll. Im 'ProgressChanged' Event-Handler, erhalten Sie einfach, dass' String' und weisen es der 'Text' des' Etikett. – jmcilhinney

+0

Schauen Sie sich mein Beispiel [hier] (http://www.vbforums.com/showthread.php?471889-Using-the-BackgroundWorker-Component) an. Sie können sehen, wie 'String' übergeben und verwendet werden kann. Statt einer Schleife haben Sie einfach mehrere diskrete Aufrufe von 'ReportProgress' mit jeweils anderem Text. – jmcilhinney

Verwandte Themen