我有这堂课:
public class CursorWait : IDisposable
{
private readonly CancellationTokenSource _tokenSource;
public CursorWait(int showAfter)
{
_tokenSource = new CancellationTokenSource();
Task.Delay(showAfter, _tokenSource.Token).ContinueWith(delegate(Task task)
{
if (!task.IsCanceled)
Mouse.SetCursor(Cursors.Wait);
});
}
public void Dispose()
{
_tokenSource.Cancel();
Mouse.SetCursor(Cursors.Arrow);
}
}
像这样使用它:
using (new CursorWait(showAfter: 500))
{
DoSomethingMayBeHeavyOrNotInUI();
}
然而,由于Mouse.SetCursor依赖于UI线程来更改它,并且因为它很忙,它永远不会改变,所以我怎么能改变光标呢?
注意:我知道我不应该阻止UI线程而只是更改窗口的属性IsHitTestVisible。但我是这个项目的新手,我的团队以这种方式做了事情,他们不会让我,因为项目已经完成了
答案 0 :(得分:2)
尝试添加此行设置鼠标光标后。
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new Action(delegate { }));
答案 1 :(得分:1)
Application.Current.Dispatcher.Invoke(new Action(()=>
{
// your code
}));
或
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background,
new ThreadStart(delegate
{
// your code
}));
有关详情,请访问:MSDN - Dispatcher.Invoke Method