Une façon de le faire dans notre application, à l'aide de IDisposable et puis avec using(){}
blocs pour assurer le curseur est réinitialisé lorsque vous avez terminé.
public class OverrideCursor : IDisposable
{
public OverrideCursor(Cursor changeToCursor)
{
Mouse.OverrideCursor = changeToCursor;
}
#region IDisposable Members
public void Dispose()
{
Mouse.OverrideCursor = null;
}
#endregion
}
et puis dans votre code:
using (OverrideCursor cursor = new OverrideCursor(Cursors.Wait))
{
// Do work...
}
Le remplacement prend fin lorsque: la fin de l'utilisation de déclaration est atteint; ou si une exception est levée et le contrôle des feuilles de la déclaration bloc avant la fin de l'instruction.
Mise à jour
Pour éviter le clignotement du curseur que vous pouvez faire:
public class OverrideCursor : IDisposable
{
static Stack<Cursor> s_Stack = new Stack<Cursor>();
public OverrideCursor(Cursor changeToCursor)
{
s_Stack.Push(changeToCursor);
if (Mouse.OverrideCursor != changeToCursor)
Mouse.OverrideCursor = changeToCursor;
}
public void Dispose()
{
s_Stack.Pop();
Cursor cursor = s_Stack.Count > 0 ? s_Stack.Peek() : null;
if (cursor != Mouse.OverrideCursor)
Mouse.OverrideCursor = cursor;
}
}