Update text im label des Hauptformulars während der Anwendung ist die Bearbeitung eines anderen thread
Habe ich ein thread erstellt, um bestimmte Funktionen in meiner Anwendung und während der Durchführung es, ich will update das label in das Hauptformular der Anwendung ist sichtbar für Benutzer.
Ich versuchte wieder die string-Daten durch die Funktion, welche ich aufrufen usinag seprate thread, aber es funktioniert nicht.
Bitte lassen Sie mich wissen, ob es eine Lösung zum aktualisieren der label-text während der Durchführung einer Aktivität mit thread.
class e2ertaData : e2erta1
{
public void rsData()
{
network networkDetails = new network();
csv csvFile = new csv();
ftpFile ftpData = new ftpFile();
//Host Geo Data
string getIP = networkDetails.GetIP();
string[] hostData = getIP.Split('~');
GeoIP geoIPReq = new GeoIP();
GeoIpData geoIPReqData = new GeoIpData();
geoIPReqData = geoIPReq.GetMy();
if (geoIPReqData.KeyValue["Error"].ToString() == "NO")
{
//Reading server names from XML file
XmlDocument thisXmlDoc = new XmlDocument();
thisXmlDoc.LoadXml(ftpData.getConfigFile("server.xml"));
XmlNodeList xnList = thisXmlDoc.SelectNodes("/servers/server");
//updating label in e2erta1
this.l1.Text = "daaaaaaaaaaa";
this.l1.Visible = true;
this.l1.Refresh();
foreach (XmlNode xn in xnList)
{
string rtNote = "";
string requestedServer = xn["sname"].InnerText;
string rtGet = networkDetails.GetRT(requestedServer);
if (rtGet.Contains("Exception"))
{
rtNote = rtGet;
//MessageBox.Show(rtNote);
}
try
{
var row = new List<string> { rtGet, rtNote };
ftpData.addToCSVFile(row);
}
catch (Exception c)
{
MessageBox.Show(c.ToString());
}
}
}
else
{
MessageBox.Show("Geo data : " + geoIPReqData.KeyValue["Error"].ToString());
}
//return null;
}
}
Dank,
Naveed
- versuchen Sie, label.Refresh () - und auch könnten Sie bitte etwas code
- Ist
e2erta1
eine form?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Berücksichtigen Sie auch die Verwendung
BackgroundWorker
Komponente.Innen DoWork-Ereignishandler führen Sie alles, was Sie tun, in deinem thread, und rufen Sie ReportProgress-Methode übergeben Fortschritt zu Ihrem Formular:
Innen ReportProgress-event-handler einfach einen Wert zuweisen zu label:
Starten der Hintergrundverarbeitung aufrufen
backgroundWorker1.RunWorkerAsync();
UPDATE: der code funktioniert nicht, weil die Steuerelemente aktualisiert werden kann, nur aus dem thread, der Sie erstellt hat (UI-thread). Benutzen Sie deshalb Aufrufen, ausführen, update-Funktion auf UI-thread. Beispiel und Beschreibung finden Sie hier.
Verwenden Sie diese aus deinem thread:
Edit:
Können Sie auch testen, die IsHandleCreated - Eigenschaft, bevor Sie mit
Invoke
:Invoke
.