Hallo,
ich habe das Problem, dass sich ein deaktivierter Button die Klicks auf ihn merkt und nach dem Aktivieren die Button_Klick_Events trotzdem alle ausführt.
Für den folgenden Beispielcode bedeutet das, dass nach 5 schnellen Klicks nicht 1 sonder 5 im Label steht.
int number = 0;
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
number++;
label1.Text = number.ToString();
Thread.Sleep(1000);
button1.Enabled = true;
}
Die Artikel
Wenn Button enabled=false, dann auch ALLE klick-Events der Form solange deaktivieren
und
[FAQ] Warum blockiert mein GUI?
haben mir so nicht weitergeholfen.
Folgende Ansätze habe ich versucht, haben aber nicht geklappt:
Kennt Ihr eine Lösung?
MfG
DAs funktinoiert nicht, weil die Gui blockiert ist, die messages aber dennoch in die Nachrichtenpumpe laufen und dannach auf einen Enabled=True button stoßen...
Folgende Ansätze habe ich versucht, haben aber nicht geklappt:
- Auslagern des arbeitsintensiven Codes in einen Backgroundworker, der nach dem Ende den Button wieder enabled.
Hier hast du was falsch gemacht. Dieser Ansatz ist der richtige
Hihi, das Ergebnis hätte ich jetzt auch so erwartet.
nehm mal das enabled = true heraus.
Deine testroutine enabled den Knopf ja wieder am Ende. Das Sleep() im gui thread sorgt auch dafür, dass die folgenden Mouseclick events nicht abgearbeitet werden können. Trotzdem gehen sie aber nicht verloren, da sie noch in der MessageQueue sind
Edit: Aha mal wieder jemand schnekller =)