K
Du könntest noch ein Doevents in der Schleife machen. Das sorgt zwar dafür das anstehende Events ausgeführt werden, aber der Weg über einen Thread kann sich lohnen. (Manchmal ist ein Doevents einfach näher an der geforderten Lösung drann).
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("Test");
}
private void button1_Click(object sender, EventArgs e)
{
for(int i = 0;i < 50000;++i)
{
label1.Text = i.ToString();
Application.DoEvents();
}
}
}
Wenn Sie ein Windows Form ausführen, wird ein neues Formular erstellt, das dann auf zu behandelnde Ereignisse wartet. Immer dann, wenn das Formular ein Ereignis behandelt, wird der gesamte Code verarbeitet, der dem Ereignis zugeordnet ist. Alle anderen Ereignisse verbleiben in der Warteschlange. Während der Code das Ereignis behandelt, reagiert die Anwendung nicht. Beispielsweise wird das Fenster nicht neu aufgebaut, wenn ein anderes Fenster darüber gezogen wird.
Wenn Sie im Code DoEvents aufrufen, kann die Anwendung die anderen Ereignisse behandeln. Wenn Sie beispielsweise bei einem Formular, mit dem einer ListBox Daten hinzugefügt werden, dem Code DoEvents hinzufügen, wird das Formular neu aufgebaut, wenn ein anderes Fenster darüber gezogen wird. Wenn Sie DoEvents aus dem Code entfernen, wird das Formular so lange nicht neu aufgebaut, bis der Click-Ereignishandler der Schaltfläche die Ausführung abgeschlossen hat.
Üblicherweise wird diese Methode in einer Warteschleife verwendet, um Meldungen zu verarbeiten.
Vorsicht
Durch Aufrufen dieser Methode kann Code eventuell erneut durchlaufen werden, wenn eine Meldung ein Ereignis auslöst.