WPF Mouse.OverrideCursor无法正常工作

时间:2015-09-02 03:03:37

标签: c# wpf

我正在构建一个文档管理系统,我正在尝试在文档加载时将光标更改为“等待”光标,非常标准。

根据MSDN文档,我使用以下代码:

 System.Windows.Input.Mouse.OverrideCursor = System.Windows.Input.Cursors.Wait;
 try
 {
     newPage.LoadForm(data);
 }
 finally
 {
     System.Windows.Input.Mouse.OverrideCursor = null;
 }     

问题是,在LoadForm完成后,光标不会返回到正常状态。我已经调试了程序并且正在运行“null”行,所以我不知道问题是什么。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果这是一个长时间运行的操作,您可以考虑将整个代码移动到一个Task(尽管在这种情况下,您必须将对OverrideCursor属性的更改分派回主线程)。

我使用Sleep模拟一个长时间运行的应用程序快速测试了它,它似乎工作正常(我把这个代码放在一个空的WPF应用程序中的窗口构造函数中进行测试)。

Task.Factory.StartNew(() =>
    {
        Application.Current.Dispatcher.Invoke(() =>
            System.Windows.Input.Mouse.OverrideCursor = System.Windows.Input.Cursors.Wait);
        try
        {
            Thread.Sleep(5000);
        }
        finally
        {
            Application.Current.Dispatcher.Invoke(() =>
                System.Windows.Input.Mouse.OverrideCursor = null);
        }
    });

答案 1 :(得分:0)

替代方法

您必须将其设置为所需的光标类型,而不是将其设置为null。因此,不要将其设置为null,而是将其设置为Arrow(我假设这是您在Normal状态下所需的)。

所以在finally块中用这个替换你的代码:

System.Windows.Input.Mouse.OverrideCursor = System.Windows.Input.Cursors.Arrow;

编辑1:

如果您不想使用变通方法,请尝试在try块结束时将Cursor设置为null。