如何在Windows Phone上记录按钮点击并播放序列
本文关键字:播放 按钮 记录 Windows Phone | 更新日期: 2023-09-27 18:02:20
我正在为Windows Phone 7开发一个应用程序,当点击某些按钮时可以播放声音。我想能够"记录"按钮的顺序,点击,这样它就会出现播放什么他们"组成"。我假设某种计时器会被用来记录点击,然后你可以在以后复制点击。我就是找不到正确的方向。如有任何建议或例子,请予参考。
我会将所有按钮连接到相同的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不是线程安全的,所以你需要自己添加同步逻辑。
不管怎样,这应该让你开始。