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

时间:2011-07-18 17:19:24

标签: c# windows-phone-7 timer

我正在开发一款适用于Windows Phone 7的应用,可在单击某些按钮时播放声音。我希望能够“记录”点击的按钮序列,以便它能够回放它们“组成”的内容。我假设会使用某种计时器来跟踪点击次数,然后您可以稍后复制点击次数。我似乎无法朝着正确的方向前进。我感谢任何建议或例子。

1 个答案:

答案 0 :(得分:0)

我会将所有按钮连接到同一个ICommand或Click事件处理程序。然后在该处理程序中,在对其执行某些操作之前,将点击记录添加到队列中。

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()会阻止您的用户界面这是不好的,所以您可以按照建议使用计时器。根据您需要的分辨率,这可能也可能不可行。另一种选择是让后台线程读取队列,然后使用Dispatcher调用DoAction()(在后台线程上调用Thread.Sleep()就可以了),但要记住Queue不是线程安全的,所以你会需要自己添加同步逻辑。

无论如何,这应该让你开始。