type see remarks example cref c# timer delay wait

see - remarks c#



Espere n segundos, luego la siguiente línea de código sin congelar la forma (4)

El temporizador debería funcionar bien en este caso, a menos que coloque Thread.Sleep en su controlador o el controlador mismo tarde demasiado tiempo en completarse.

No ha especificado el marco de la interfaz de usuario que usa o la versión .Net, pero para la última versión de .Net puede usar async / await. De esa manera, la interfaz de usuario no se congelaría mientras su código espera la tarea en segundo plano

void async MyMethod() { var result = await Task.Run(() => long_running_code); }

Hola, estoy tratando de encontrar un método para esperar varios milisegundos antes de pasar a la siguiente línea de código.

He investigado Thread.Sleep pero esto congelará el formulario principal, me gustaría que esto permanezca activo.

Probé los cronómetros y los cronómetros, y ambos congelan el formulario principal cuando deberían estar publicando en una consola cuando hacen tictac.

No pude encontrar una manera de usar task.delay o background worker en la espera que yo quisiera.

Pseudo Código:

Wait 2 - 6 seconds Log "waiting" Log "waiting" Log "waiting" Stop Waiting - Run next line of code.

Los métodos que he intentado simplemente congelan el formulario y luego llenan el registro. Solo quiero un método simple de espera sin congelar el formulario y sin tener que lidiar con los eventos que se llaman, lo que significa que no se ejecutará la siguiente línea.

Cualquier ayuda sería increíble porque todavía soy nuevo en c # y me está volviendo un poco loco :(


La palabra clave Task.Delay , junto con Task.Delay hace que esto sea trivial.

public async Task Foo() { await Task.Delay(2000); txtConsole.AppendText("Waiting..."); DoStuff(); }


Trate de usar un DispatcherTimer . Es un objeto bastante útil que realiza todo el trabajo de delegación en el subproceso de la interfaz de usuario.

Por ejemplo:

private DispatcherTimer _dtTimer = null; public Constructor1(){ _dtTimer = new DispatcherTimer(); _dtTimer.Tick += new System.EventHandler(HandleTick); _dtTimer.Interval = new TimeSpan(0, 0, 0, 2); //Timespan of 2 seconds _dtTimer.Start(); } private void HandleTick(object sender, System.EventArgs e) { _uiTextBlock.Text = "Timer ticked!"; }


DateTime Tthen = DateTime.Now; do { Application.DoEvents(); } while (Tthen.AddSeconds(5) > DateTime.Now);