Este dilema se puede tratar de variadas maneras, sin embargo te mostramos la respuesta más completa para nosotros.
Solución:
Puedes usar Cursor.Current
.
// Set cursor as hourglass
Cursor.Current = Cursors.WaitCursor;
// Execute your time-intensive hashing code here...
// Set cursor as default arrow
Cursor.Current = Cursors.Default;
Sin embargo, si la operación hash es De Verdad (MSDN define esto como más de 2 a 7 segundos), probablemente debería usar un indicador de retroalimentación visual que no sea el cursor para notificar al usuario sobre el progreso. Para obtener un conjunto de pautas más detallado, consulte este artículo.
Editar:
Como señaló @Am, es posible que deba llamar Application.DoEvents();
después Cursor.Current = Cursors.WaitCursor;
para asegurarse de que el reloj de arena se muestre realmente.
Realmente,
Cursor.Current = Cursors.WaitCursor;
temporalmente establece el cursor de espera, pero no garantiza que el cursor de espera se muestre hasta el final de la operación. Otros programas o controles dentro de su programa pueden restablecer fácilmente el cursor a la flecha predeterminada, como de hecho sucede cuando mueve el mouse mientras la operación aún se está ejecutando.
Una forma mucho mejor de mostrar el cursor de espera es establecer la propiedad UseWaitCursor en un formulario para true:
form.UseWaitCursor = true;
Esto mostrará el cursor de espera para todos los controles en el formulario hasta que establezca esta propiedad en false. Si desea que se muestre el cursor de espera en el nivel de la aplicación, debe usar:
Application.UseWaitCursor = true;
Sobre la base de lo anterior, mi enfoque preferido (dado que esta es una acción que se realiza con frecuencia) es envolver el código del cursor de espera en una clase auxiliar IDisposable para que pueda usarse con using() (una línea de código), tomar parámetros opcionales, ejecutar el código dentro, luego limpie (restaurar el cursor) después.
public class CursorWait : IDisposable
public CursorWait(bool appStarting = false, bool applicationCursor = false)
// Wait
Cursor.Current = appStarting ? Cursors.AppStarting : Cursors.WaitCursor;
if (applicationCursor) Application.UseWaitCursor = true;
public void Dispose()
// Reset
Cursor.Current = Cursors.Default;
Application.UseWaitCursor = false;
Uso:
using (new CursorWait())
// Perform some code that shows cursor
Te mostramos las comentarios y valoraciones de los lectores
Si te sientes suscitado, tienes la habilidad dejar un tutorial acerca de qué te ha parecido este post.