【问题标题】:Avoid hourglass mouse cursor when calling a web-service?调用 Web 服务时避免使用沙漏鼠标光标?
【发布时间】:2021-12-31 00:36:13
【问题描述】:

我不知道这是一般的 Web 服务问题还是只是我的特定场景,即带有 DispatcherTimer 调用 Web 服务方法的 WPF 应用程序。 每当调用计时器时,鼠标光标会自动变为沙漏光标。

调用的处理时间非常短,每 3 秒发生一次,因此用户体验是每 3 秒鼠标会像沙漏一样闪烁一瞬间,然后又回到正常的光标表示。

如何避免这种不便?

谢谢。

【问题讨论】:

    标签: wpf web-services mouse-cursor


    【解决方案1】:

    当计时器触发时,您的整个应用程序是否都会无响应,或者整个过程太快而无法注意到?

    我的假设是您可能会在 DispatcherTimer 上同步调用代码,这可能会导致短暂的无响应(可能还有沙漏)。要解决此问题,请确保您的 Dispatcher 的 Tick 事件是异步代码。

    这是一个简单的小例子,它每 3 秒执行一秒的虚假工作,然后更新 GUI:

    public partial class MainWindow : Window
    {
        private static int foo = 0;
    
        public MainWindow()
        {
            InitializeComponent();
    
            DispatcherTimer timer = new DispatcherTimer();
            timer.Interval = TimeSpan.FromMilliseconds(3000);
            timer.Tick += new EventHandler(delegate(object o, EventArgs args)
            {
                StatusBox.Text = "Incrementing";
    
                ThreadStart start = delegate()
                {
                    // Simulate work
                    Thread.Sleep(1000);
    
                    // Update gui
                    this.Dispatcher.BeginInvoke(new Action(delegate
                    {
                        CountingBox.Text = (foo++).ToString();
                        StatusBox.Text = "Waiting";
                    }));
                };
    
                new Thread(start).Start();                
            });
    
            timer.Start();
        }
    }
    

    (还有其他方法可以实现相同的目标,这个很简单。有关更多信息,请参阅此处的指南:http://msdn.microsoft.com/en-us/magazine/cc163328.aspx

    【讨论】:

    • 顺便说一句,你是对的 - 我确实同步调用了网络服务,我也认为这是沙漏闪烁的来源。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多