Một cách chúng tôi thực hiện điều này trong ứng dụng của mình là sử dụng IDis Dùng và sau đó với using(){}
các khối để đảm bảo con trỏ được đặt lại khi hoàn tất.
public class OverrideCursor : IDisposable
{
public OverrideCursor(Cursor changeToCursor)
{
Mouse.OverrideCursor = changeToCursor;
}
#region IDisposable Members
public void Dispose()
{
Mouse.OverrideCursor = null;
}
#endregion
}
và sau đó trong mã của bạn:
using (OverrideCursor cursor = new OverrideCursor(Cursors.Wait))
{
// Do work...
}
Việc ghi đè sẽ kết thúc khi một trong hai: kết thúc câu lệnh sử dụng hoặc; nếu một ngoại lệ được ném và điều khiển rời khỏi khối lệnh trước khi kết thúc câu lệnh.
Cập nhật
Để ngăn con trỏ nhấp nháy, bạn có thể làm:
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;
}
}