Problem mit Aktualisierung

bienenscheisse

Grünschnabel
Moin

Ich habe erst vor kurzem angefangen mit C#, habe davor nur mit PHP gearbeitet.

Nun zu meinem Problem:

Ich habe in meiner Form1 eine Progressbar und ein Label: status.
Mit einem Klick auf Button eintragen, soll Verbindung zu einer PHP Datei aufgenommen werden mittels WebRequest. Zufinden in Funktion postHTML()
Code:
        private void eintragen_Click(object sender, EventArgs e)
        {
            progressBar1.ForeColor = Color.Blue;
            progressBar1.Value = 0;
            status.Text = "Connecting to Server...";
            progressBar1.Value += 5;
 
            string URL = "http://xxx.de/myscript.php";

            string response = postHTML(URL);

            if (response == "false")
            {
                progressBar1.ForeColor = Color.Red;
                progressBar1.Value += 200;
                status.Text = "Host not found, check your Inet connection... :(";
            }
            else
            {
                string pattern = @"([a-zA-Z0-9]*)";
                foreach (Match match in Regex.Matches(response, pattern))
                    if (match.Value != "") MessageBox.Show("Found '" + match.Value + "' at position '" + match.Index + "'", "Ausgabe");
            }

Das Problem ist das der status.Text erst nach dem WebRequest ausgeführt wird, wieso?
Und noch eine Frage ich würde gerne innerhalb der Function status.Text zuückgeben like "Connected..." , "Sending Post data..." , "Host not found, check your Inet connection... :(" und demnach sollte sich auch die Progressbar bewegen.

Ausbrobierte Sachen bezüglich dem Label Problem:

Code:
Thread.Sleep(125);
Dachte das dann Zeit bleibt bevor
Code:
postHTML()
ausgeführt wird


Ich habe auch noch sachen gelesen über:

Multithreading
Code:
Application.DoEvents()


Allerdings bin ich mir nicht sicher, welches davon bzw. ob überhaupt einer dieser Möglichkeiten abhilfe schaffen würde.

Ausbrobierte Sachen bezüglich dem Problem Rückgabe wäred der laufzeit der Funktion:
Code:
 return status;
Was natürlich zum abbruch der Funktion führt...
Leider fehlte mir hier auch für weitere Maßnahmen der Ansatzpunkt


Ich habe mich bemüht alles so ausführlich wie möglich zu erklären, falls noch etwas fehlt werde ich es natürlich gerne posten!
Ich würde mich sehr über eine Antwort freuen. Vielen Dank für eure Aufmerksamkeit.


Gruß Wolf
 
Hallo,

die einfachste Lösung wäre, wenn du jedesmal wenn du den Text änderst Refresh aufrufst.

C#:
status.Text = "Connecting to Server...";
status.Refresh();

Alternative hat ein Label auch ein TextChanged Ereignis.
Wenn du das für das Label verwendest, kannst du den Refresh da drin aufrufen,
da es immer aufgrufen wird, wenn du den Text änderst.

C#:
this.status = new System.Windows.Label();
...
this.status.TextChanged += new System.EventHandler(this.status_TextChanged);


private void status_TextChanged(object sender, EventArgs e)
{
   status.Refresh();
}
 
Zuletzt bearbeitet:
Zurück