c# - DispatcherTimer 堆栈 - UWP

标签 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();
}

最佳答案

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

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所说,您鼠标的每次移动都在创建一个新的计时器。因此,我为计时器声明了一个属性,并在鼠标移动时停止它,然后重新启动它。

关于c# - DispatcherTimer 堆栈 - UWP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50482683/

相关文章:

c# - 居中对齐最后一行中的 GridView 项目

c# - 获取哪些值使数组中给定数字的总和的算法

c# - 在C# 7.0中使用反射获取不包括本地函数的方法?

c# - 修改edmx模板文件

c# - DynamicResource 未显示正确的值

c# - 成员名称不能与其在 g.cs 文件中的封闭类型相同

c# - 获取给定数字 + c# 的 2 的幂之和

c# - 内容对话框不显示 WINUI3

c# - UWP MediaElement 随机崩溃

UWP 链接到串口