我正在开发一款适用于Windows Phone 7的应用,可在单击某些按钮时播放声音。我希望能够“记录”点击的按钮序列,以便它能够回放它们“组成”的内容。我假设会使用某种计时器来跟踪点击次数,然后您可以稍后复制点击次数。我似乎无法朝着正确的方向前进。我感谢任何建议或例子。
答案 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不是线程安全的,所以你会需要自己添加同步逻辑。
无论如何,这应该让你开始。