एक तरह से हम अपने आवेदन में ऐसा करते हैं कि आईडीआईजॉरी का उपयोग कर रहे हैं और फिर using(){}
ब्लॉक के साथ यह सुनिश्चित करने के लिए कि कर्सर कब रीसेट हो गया है।
public class OverrideCursor : IDisposable
{
public OverrideCursor(Cursor changeToCursor)
{
Mouse.OverrideCursor = changeToCursor;
}
#region IDisposable Members
public void Dispose()
{
Mouse.OverrideCursor = null;
}
#endregion
}
और फिर अपने कोड में:
using (OverrideCursor cursor = new OverrideCursor(Cursors.Wait))
{
// Do work...
}
जब या तो ओवरराइड समाप्त हो जाएगी: उपयोग कथन का अंत या पहुंच गया है; यदि अपवाद को फेंक दिया जाता है और नियंत्रण कथन के अंत से पहले स्टेटमेंट ब्लॉक छोड़ देता है।
अपडेट करें
कर्सर फ़्लिकरिंग को रोकने के लिए आप यह कर सकते हैं:
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;
}
}