Hallo.
Ich habe ein Formular und in diesem wird per Click Folgendes zum Test ausgelöst:
private void MnuFileSrcFolder_Click(object sender, EventArgs e)
{
Form fw = new Form() { Width = 50, Height = 300 };
System.Windows.Forms.Label l = new System.Windows.Forms.Label();
l.Text = "Hallo Welt";
fw.Controls.Add(l);
fw.Show();
Thread.Sleep(3000);
fw.Close();
}
Ich steh grad echt auf dem Schlauch. Aber das Formular wird nicht vollständig gezeichnet. Es erscheint der Rahmen mit dem X oben rechts und die graue Fläche. Beim Label allerdings wird lediglich der hintergrund angezeigt und nicht der Text.
ShowDialog() würde alles anzeigen aber ist modular.
Ich brauch grad mal einen Schups in die richtige Richtung 😃
Du blockierst mit Thread.Sleep
den GUI-Thread (der wo eigentlich zeichnen würde wenn man ihn lässt).
So geht es ohne Blockieren
private async void MnuFileSrcFolder_Click(object sender, EventArgs e)
{
Form fw = new Form() { Width = 50, Height = 300 };
System.Windows.Forms.Label l = new System.Windows.Forms.Label();
l.Text = "Hallo Welt";
fw.Controls.Add(l);
fw.Show();
await Task.Delay( 3000 );
fw.Close();
}
Gib der Methode das async-Schlüsselwort.
Das sagt aus, dass die Methode asynchron laufen darf.
Dann darfst Du auch das await-Schlüsselwort nutzen.
Das brauchst DU um asynchron warten zu können, sprich: await Task.Delay(3000)
PS: Und Sir Rufo war schneller