Welcher Code soll nach 1 Sekunde Wartezeit ausgeführt werden?
Allensb
1
Woher weißt du, dass es nicht funktioniert? Versuchen Sie, 10000 zu schlafen und prüfen Sie, ob es funktioniert. 1000 ist sehr kurz, um zu beurteilen, ob es funktioniert.
Missy
Dies funktioniert gut: System.Threading.Thread.Sleep (1000);
Andrew
Antworten:
175
Hält es an, aber Sie sehen Ihre rote Farbe nicht in der Zelle? Versuche dies:
Persönlich halte ich Thread.Sleepeine schlechte Umsetzung. Es sperrt die Benutzeroberfläche usw. Ich persönlich mag Timer-Implementierungen, da es wartet und dann ausgelöst wird.
Verwendung: DelayFactory.DelayAction(500, new Action(() => { this.RunAction(); }));
//Note Forms.Timer and Timer() have similar implementations. publicstaticvoidDelayAction(int millisecond,Action action){var timer =newDispatcherTimer();
timer.Tick+=delegate{
action.Invoke();
timer.Stop();};
timer.Interval=TimeSpan.FromMilliseconds(millisecond);
timer.Start();}
Nur ein Vorschlag. Wenn Sie die min mit 60000 multiplizieren, ist der Parametername aussagekräftiger. timer1.Interval = min * 60000;
Golda
Ja, Sie haben Recht, es sollte Millisekunden statt min sein. Ich werde den Namen aktualisieren. Danke
sagte
2
Beschäftigtes Warten ist kein schwerwiegender Nachteil, wenn es kurz ist. In meinem Fall musste dem Benutzer durch Flashen eines Steuerelements ein visuelles Feedback gegeben werden (es handelt sich um ein Diagrammsteuerelement, das in die Zwischenablage kopiert werden kann und dessen Hintergrund für einige Millisekunden geändert wird). Es funktioniert gut so:
using System.Threading;...Clipboard.SetImage(bm);// some code
distribution_chart.BackColor=Color.Gray;Application.DoEvents();// ensure repaint, may be not neededThread.Sleep(50);
distribution_chart.BackColor=Color.OldLace;....
Ich habe das Gefühl, dass hier nur die Reihenfolge falsch war. Selçuklu wollte, dass die App eine Sekunde wartet, bevor sie das Raster ausfüllt. Der Befehl Sleep sollte also vor dem Befehl fill stehen.
Wenn wir mit der Verwendung einer asynchronen Methode einverstanden sind, Task.Delaywerden unsere Anforderungen erfüllt. Dies kann auch nützlich sein, wenn Sie aus ratenbegrenzenden Gründen innerhalb einer for-Schleife warten möchten.
publicasyncTaskDoTasks(List<Items> items){foreach(var item in items){awaitTask.Delay(2*1000);DoWork(item);}}
Sie können den Abschluss dieser Methode wie folgt abwarten:
Dies ist eine gültige Lösung. Sie sollten jedoch eine Beschreibung der Vor- und Nachteile hinzufügen, z. B. die Erwähnung, dass die CPU-Zeit in Anspruch genommen wird, da es sich um eine Lösung handelt, bei der viel gewartet wird.
Antworten:
Hält es an, aber Sie sehen Ihre rote Farbe nicht in der Zelle? Versuche dies:
quelle
Persönlich halte ich
Thread.Sleep
eine schlechte Umsetzung. Es sperrt die Benutzeroberfläche usw. Ich persönlich mag Timer-Implementierungen, da es wartet und dann ausgelöst wird.Verwendung:
DelayFactory.DelayAction(500, new Action(() => { this.RunAction(); }));
quelle
Wartefunktion mit Timern, keine UI-Sperren.
Verwendung: Platzieren Sie dies einfach in Ihrem Code, der warten muss:
quelle
Beschäftigtes Warten ist kein schwerwiegender Nachteil, wenn es kurz ist. In meinem Fall musste dem Benutzer durch Flashen eines Steuerelements ein visuelles Feedback gegeben werden (es handelt sich um ein Diagrammsteuerelement, das in die Zwischenablage kopiert werden kann und dessen Hintergrund für einige Millisekunden geändert wird). Es funktioniert gut so:
quelle
Ich habe das Gefühl, dass hier nur die Reihenfolge falsch war. Selçuklu wollte, dass die App eine Sekunde wartet, bevor sie das Raster ausfüllt. Der Befehl Sleep sollte also vor dem Befehl fill stehen.
quelle
.Net Core scheint das zu fehlen
DispatcherTimer
.Wenn wir mit der Verwendung einer asynchronen Methode einverstanden sind,
Task.Delay
werden unsere Anforderungen erfüllt. Dies kann auch nützlich sein, wenn Sie aus ratenbegrenzenden Gründen innerhalb einer for-Schleife warten möchten.Sie können den Abschluss dieser Methode wie folgt abwarten:
quelle
benutze
dataGridView1.Refresh();
:)quelle
Probieren Sie diese Funktion aus
Funktion aufrufen
quelle
Vielleicht versuchen Sie diesen Code:
quelle