c# .net ajax winforms

c# - Mostrar un control de giro mientras un programa Windows Forms está "procesando", de forma similar a ajaxStart/ajaxStop?



.net winforms (8)

Sí Sí. Sé que son 2 tecnologías completamente diferentes. Recientemente pasé al desarrollo FAT con C # y Windows Forms desde el desarrollo web. Siempre pensé que era muy fácil mostrar una rueda giratoria utilizando ajaxStart y ajaxStop, por lo que el usuario sabe que algo está ocurriendo y seguir esperando.

¿Existe una técnica equivalente simple para C # Windows Forms que se pueda implementar globalmente? Por ejemplo, si estoy consultando una base de datos y esperando algunos resultados, normalmente el programa deja de responder durante unos segundos y luego vuelve a funcionar después de "procesar". ¿Hay alguna forma global en la que pueda mostrar una rueda giratoria mientras mi programa está "procesando" en lugar de identificar todos los puntos posibles en el programa que podrían hacer que deje de responder y simplemente está arrancando nuevos hilos?

Por favor, hágamelo saber si no estoy claro.


¿Puedo agregar este link CodeProject?

Todo lo que necesitas es construir, arrastrar desde la barra de herramientas y usar. El componente LoadingCircle funciona sin ningún problema. Funciona como un encanto, incluso puedes personalizarlo!


Antes de procesar: Cursor.Current = Cursores.WaitCursor;

Procesos Algo ();

Después de procesar: Cursor.Current = Cursors.AppStarting;


Desde .NET 4.5 (VS 2015+) puede usar una combinación de async y esperar con Progress para enviar actualizaciones al subproceso de la interfaz de usuario:

Haga clic para abrir Relacionado Artical


Esta es la forma en que me gusta usar cuando necesito un cursor de espera; En lugar de escribir un código try-finally.

#region WaitCursor public static IDisposable BeginWaitCursorBlock() { return ((!_waitCursorIsActive) ? (IDisposable)new waitCursor() : null); } private static bool _waitCursorIsActive; private class waitCursor : IDisposable { private Cursor oldCur; public waitCursor() { _waitCursorIsActive = true; oldCur = Cursor.Current; Cursor.Current = Cursors.WaitCursor; } public void Dispose() { Cursor.Current = oldCur; _waitCursorIsActive = false; } } #endregion

Ejemplo de uso:

using (BeginWaitCursorBlock()) { ... }


Estoy usando Visual Studio Enterprise 2015. Los estilos / tipos de cursor sugeridos aquí, ninguno de ellos funcionó conmigo.

El que está trabajando conmigo es:

private async void button_Click(object sender, RoutedEventArgs e) { Cursor = Cursors.Wait; // change cursor to hourglass type ThatProcessThatTookVeryLongTime(); Cursor = Cursors.Arrow; // change cursor to normal type }


Si su programa deja de responder, eso es porque está haciendo un trabajo real en el hilo de la interfaz de usuario. Mueva el trabajo a un hilo de fondo, deshabilite la interacción de la interfaz de usuario según sea necesario para evitar que el usuario toque cosas mientras realiza el trabajo, luego, cuando el trabajo de fondo finalice, transfiera los resultados al hilo de la interfaz de usuario utilizando Control.Invocar, luego actualice su interfaz de usuario con resultados, luego volver a habilitar todo.

Para implementar el spinner, uso un PictureBox con un gif de spinner en él. La inhabilito cuando la IU está inactiva y la habilito cuando arranco el trabajador de fondo.

La alternativa es cambiar el cursor del mouse al cursor de "espera", del cual no soy un gran fan.


sí hay.

Lo fácil fue crear dos métodos de utilidad, uno para habilitar el indicador de "carga" y otro para desactivar ese estado de carga.

Tras todas las llamadas iniciales ajax (o cualquier otra llamada larga), llame automáticamente al método de habilitación.

tan pronto como se active una devolución de llamada incompleta, llame al método de desactivación desde la devolución de llamada incompleta.


La forma estándar de Windows Forms para hacerlo es Cursor.Current = Cursors.WaitCursor; .

¿Eso funciona para ti, o tiene que ser una imagen?