DispatcherTimer堆叠 - UWP

时间:2018-05-23 07:47:29

标签: c# xaml uwp dispatchertimer

我目前正在UWP处理一个项目,如果鼠标移动,我想要CommandBar Hidden Compact。五秒钟后(如果鼠标不移动),CommandBar应该再次返回Hidden

我没有收到任何错误,但当我移动鼠标时CommandBar变得疯狂,当我再次移动鼠标时,它只是从Hidden闪烁到Compact 。我认为问题在于OnMouseMovement事件正在叠加。

这是我的鼠标移动事件代码:

public async void OnPointerMoved(object Sender, PointerRoutedEventArgs e)
{
    CmdBar.ClosedDisplayMode = AppBarClosedDisplayMode.Compact;
    DispatcherTimer ButtonTimer = new DispatcherTimer();
    ButtonTimer.Interval = TimeSpan.FromSeconds(5);
    ButtonTimer.Tick += (sender, args) =>
    {
        CmdBar.ClosedDisplayMode = AppBarClosedDisplayMode.Hidden;
    };
    ButtonTimer.Start();
}

1 个答案:

答案 0 :(得分:3)

我做了一个小测试项目试试并给你一个答案,这就是我做的:

private DispatcherTimer Timer { get; set; }
public MainPage()
{
    this.InitializeComponent();
    CmdBar.ClosedDisplayMode = AppBarClosedDisplayMode.Hidden;            
    Timer = new DispatcherTimer(){Interval = TimeSpan.FromSeconds(5) };
    Timer.Tick += (sender, args) => { 
        CmdBar.ClosedDisplayMode = AppBarClosedDisplayMode.Hidden; 
        Timer.Stop();
    };

}

public async void OnPointerMoved(object Sender, PointerRoutedEventArgs e)
{
    Timer.Stop();
    CmdBar.ClosedDisplayMode = AppBarClosedDisplayMode.Compact;
    Timer.Start();            
}

基本上,正如@Evk所说,你每次移动鼠标都会创建一个新的计时器。所以我为计时器声明了一个属性并停止它,然后在鼠标移动时重新启动它。