如何在Windows Phone上记录按钮点击并播放序列

本文关键字:播放 按钮 记录 Windows Phone | 更新日期: 2023-09-27 18:02:20

我正在为Windows Phone 7开发一个应用程序,当点击某些按钮时可以播放声音。我想能够"记录"按钮的顺序,点击,这样它就会出现播放什么他们"组成"。我假设某种计时器会被用来记录点击,然后你可以在以后复制点击。我就是找不到正确的方向。如有任何建议或例子,请予参考。

如何在Windows Phone上记录按钮点击并播放序列

我会将所有按钮连接到相同的iccommand或Click事件处理程序。然后在该处理程序中,在对其进行操作之前,将单击的记录添加到Queue中。

public class RecordedEvent
{
    public Button Button { get; set; } 
    public TimeSpan DelayTime { get; set; }
}
private Queue<RecordedEvent> _clickQueue = new Queue<RecordedEvent>();
private void Button_Click(object sender, RoutedEventArgs e)
{
    var button = sender as Button;
    var clickTime = DateTime.Now;
    //record the click by adding it to the queue
    _clickQueue.Enqueue(new RecordedEvent()
         { 
             Button = button,
             DelayTime = _lastClickTime - clickTime;
          };
    _lastClickTime = clickTime;
    DoAction(button); //do what ever needs to be done when the button it clicked
}

那么回放就是把项目从队列中拉出来。

public void PlayBack()
{
   var recordedClick = _clickQueue.Dequeue();
   while (recordedClick != null)
   {
       Thread.Sleep(recordedClick.DelayTime);
       DoAction(recordedClick.Button);
       recordedClick = _clickQueue.Dequeue();
   }
}

现在这不是一个完美的解决方案(您需要确保_lastClickTime第一次设置正确,等等)。但这是我将如何实现它的思路。

另一个问题是,Thread.Sleep()将阻止你的UI,这是不好的,所以你可能会使用定时器,如你所建议的。根据你需要的解决方案,这可能可行,也可能不可行。另一种选择是让一个后台线程读取Queue,然后使用Dispatcher调用DoAction()(在后台线程上调用thread . sleep()是可以的),但要记住Queue不是线程安全的,所以你需要自己添加同步逻辑。

不管怎样,这应该让你开始。