myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: Windows-Forms » Cursor für bestimmte Zeit in Eieruhr verwandeln
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Cursor für bestimmte Zeit in Eieruhr verwandeln

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Getränke Hoffmann
myCSharp.de-Mitglied

Dabei seit: 20.07.2006
Beiträge: 177
Entwicklungsumgebung: VS 2005
Herkunft: Köln


Getränke Hoffmann ist offline

Cursor für bestimmte Zeit in Eieruhr verwandeln

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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?
Neuer Beitrag 23.02.2007 14:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
frisch frisch ist männlich
myCSharp.de-Mitglied

avatar-1724.gif


Dabei seit: 18.08.2005
Beiträge: 2.082
Entwicklungsumgebung: VS C# 2005 Express
Herkunft: Coburg / Oberfranken


frisch ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Getränke Hoffmann,

C#-Code:
this.Cursor = Cursors.WaitCursor;
Neuer Beitrag 23.02.2007 14:25 Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.479
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Getränke Hoffmann,

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

herbivore
Neuer Beitrag 23.02.2007 14:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
JunkyXL JunkyXL ist männlich
myCSharp.de-Poweruser/ Experte

avatar-3234.gif


Dabei seit: 02.05.2006
Beiträge: 1.665
Entwicklungsumgebung: Visual Studio 2010 Ultimate
Herkunft: Ein paar Bytes südlich von string


JunkyXL ist offline Füge JunkyXL Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

C#-Code:
private void button_Click()
{
    this.Cursor = Cursors.Wait;

    // Datenbankupdate durchführen

    this.Cursor = Cursors.Default;
}

Edit: ihr ward schneller Augenzwinkern

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von JunkyXL am 23.02.2007 14:30.

Neuer Beitrag 23.02.2007 14:30 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
JAck30lena JAck30lena ist männlich
myCSharp.de-Team

avatar-2653.jpg


Dabei seit: 01.10.2006
Beiträge: 11.397
Entwicklungsumgebung: Visual Studio 05/08/10 Prof.


JAck30lena ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

C#-Code:
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


}
Neuer Beitrag 23.02.2007 14:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
JunkyXL JunkyXL ist männlich
myCSharp.de-Poweruser/ Experte

avatar-3234.gif


Dabei seit: 02.05.2006
Beiträge: 1.665
Entwicklungsumgebung: Visual Studio 2010 Ultimate
Herkunft: Ein paar Bytes südlich von string


JunkyXL ist offline Füge JunkyXL Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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..
Neuer Beitrag 23.02.2007 14:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.479
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
Neuer Beitrag 23.02.2007 14:38 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Getränke Hoffmann
myCSharp.de-Mitglied

Dabei seit: 20.07.2006
Beiträge: 177
Entwicklungsumgebung: VS 2005
Herkunft: Köln

Themenstarter Thema begonnen von Getränke Hoffmann

Getränke Hoffmann ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
Neuer Beitrag 23.02.2007 15:56 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.479
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
Neuer Beitrag 23.02.2007 16:00 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
frisch frisch ist männlich
myCSharp.de-Mitglied

avatar-1724.gif


Dabei seit: 18.08.2005
Beiträge: 2.082
Entwicklungsumgebung: VS C# 2005 Express
Herkunft: Coburg / Oberfranken


frisch ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
Neuer Beitrag 23.02.2007 16:38 Beiträge des Benutzers | zu Buddylist hinzufügen
Borg
myCSharp.de-Mitglied

Dabei seit: 23.08.2006
Beiträge: 1.529
Entwicklungsumgebung: VS2005
Herkunft: Berlin, Germany


Borg ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
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).
Neuer Beitrag 02.03.2007 10:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 13 Jahre.
Der letzte Beitrag ist älter als 13 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 25.09.2020 01:54