Laden...

Cursor für bestimmte Zeit in Eieruhr verwandeln

Erstellt von Getränke Hoffmann vor 17 Jahren Letzter Beitrag vor 17 Jahren 7.636 Views
G
Getränke Hoffmann Themenstarter:in
177 Beiträge seit 2006
vor 17 Jahren
Cursor für bestimmte Zeit in Eieruhr verwandeln

Hallo,

bei meiner Applikation kann es ggf. ein Weilchen dauern, bis das Datenbankupdate geschrieben ist. Damit der User auch merkt, dass sein Buttonklicken eine Wirkung hatte, er eben nur warten soll, möchte ich den Cursor bis zu dieser Zeit in eine Eieruhr verwandeln.

Wie geht das? Gibt es da ein Event oder ähnliches?

2.082 Beiträge seit 2005
vor 17 Jahren

Hallo Getränke Hoffmann,

this.Cursor = Cursors.WaitCursor;

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Getränke Hoffmann,

programmiere außerdem so, dass es nicht zu den Effekten in [FAQ] Warum blockiert mein GUI? kommt.

herbivore

1.665 Beiträge seit 2006
vor 17 Jahren
private void button_Click()
{
    this.Cursor = Cursors.Wait;
    
    // Datenbankupdate durchführen
    
    this.Cursor = Cursors.Default;
}

Edit: ihr ward schneller 😉

Gelöschter Account
vor 17 Jahren
private void button_Click()
{
    this.Cursor = Cursors.Wait;
    
    //in einem thread Datenbankupdate durchführen und in diesem thread durch invoke die gui updaten, sowie den cursor zurücksetzen
    
   
}
1.665 Beiträge seit 2006
vor 17 Jahren

Naja wozu dann den WaitCursor setzen, wenns in einem Thread ausgelagert ist? Der Cursor signalisiert nämlich auch wieder, dass in der Zeit nichts unternommen werden kann.
Also wenn es in einem Thread ausgelagert ist, was ich auch hoffe, ist für mich der WaitCursor sinnlos, man will ja dann schön weiterarbeiten können..

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo JunkyXL,

der Thread ist dazu, dass die Anwendung nicht in den unerwünschten Zustand "Reagiert nicht auf Anfragen" kommt. Alles andere ist Mist. Außerdem heißt ein Thread nicht, dass man (inhaltlich) weiterarbeiten kann. WaitCursor und Thread schließen sich also nicht aus.

herbivore

G
Getränke Hoffmann Themenstarter:in
177 Beiträge seit 2006
vor 17 Jahren

In diesem Falle wäre es sinnlos, weil der User vor dem DB Update keine anderen sinnvollen Aktionen durchführen kann. Es soll dem Nutzer einfach nur signalisiert werden, dass die Anwendung gerade "arbeitet- sein Drücken auf den "Speichern" Button also von der Anwendung verarbeitet wurde und es halt ein, zwei Sekündchen dauern kann.

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Getränke Hoffmann,

nein, es ist nicht sinnlos, sondern regelrecht falsch programmiert, wenn das GUI blockiert. Aktionen, die länger als 1/10s dauern, gehören in einen extra Thread.

herbivore

2.082 Beiträge seit 2005
vor 17 Jahren

Hallo alle,

also herbivore hat 100% Recht! Man sollte nie seine GUI blockieren lassen sondern Aufgaben die eine längere Zeit dauern können immer in Threads auslagern egal ob der Benutzer in der Zwischenzeit etwas machen darf oder nicht. Beim zweiten Fall die Controls halt disablen oder einen Modalen Dialog anzeigen.

Das blockieren einer GUI ist sehr schlecht, nicht weil dem User dann die Kontrolle genommen wird, sondern weil dann benötigte Events zum zeichnen der Form einfach nicht ausgeführt werden können und somit kann es u. a. passieren, dass der User auf einmal eine "weiße" Form hat.

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

B
1.529 Beiträge seit 2006
vor 17 Jahren

Das blockieren einer GUI ist sehr schlecht, nicht weil dem User dann die Kontrolle genommen wird, sondern weil dann benötigte Events zum zeichnen der Form einfach nicht ausgeführt werden können und somit kann es u. a. passieren, dass der User auf einmal eine "weiße" Form hat.

Noch schlimmer ist eigentlich, dass alle Events weiterhin von Windows in die MessageLoop gestellt werden. Sobald die Aktion jetzt beendet ist, werden alle diese Events ganz hastig abgespult, ohne das der Nutzer zwischendurch eingreifen könnte.
So kann der gelangweilte, nervöse User durch ein paar unglückliche Klicks an ungünstige Stellen in das weiße Fenster sich sehr viel Arbeit machen.
Natürlich wird er aber berechtigterweise der Software die Schuld geben (und diese wohl nie wieder einsetzen, geschweige denn kaufen).