Pero muy a menudo los desarrolladores caemos en una mala práctica, al setear la propiedad Cursor.Current como sigue:
Cursor.Current = Cursors.WaitCursor;
El problema con este enfoque es que setea temporalmente el Cursor de Espera, pero no asegura que el mismo se muestre hasta el final de nuestra operación. Otros programas o controles de nuestro propio programa pueden fácilmente resetear el cursor.
Esto puede confundir al usuario en pensar que la operación se ha completado cuando en realidad todavía se está ejecutando.
UseWaitCursor
Una manera mucho mejor de mostrar el Cursor de Espera es el setear la propiedad UseWaitCursor de un formulario en true.
form.UseWaitCursor = true;
Esto muestra el Cursor de Espera para el formulario o control especificado y todos sus controles hijos, hasta que se vuelva a setear la propiedad UseWaitCursor en false. Si nuestra operación no solo bloquea una ventana, sino toda la aplicación, podemos setear la propiedad estática Application.UseWaitCursor en true:
Application.UseWaitCursor = true;
Notar que al setear Application.UseWaitCursor, no se tomarán en cuenta las propiedades UseWaitCursor de cada control o formulario en particular.
Fuente: CSharp411


