您好我正在开发Windows应用商店应用。
首先,这是我的代码:
public class TickArgs : EventArgs
{
public DateTime Time { get; set; }
}
public class Metronome
{
private DispatcherTimer _timer;
public event TickHandler Tick;
public delegate void TickHandler(Metronome m, TickArgs e);
public Metronome()
{
_timer = new DispatcherTimer();
_timer.Tick += Timer_Tick;
}
private void Timer_Tick(object sender, object e)
{
if (Tick != null)
{
Tick(this, new TickArgs { Time = DateTime.Now });
}
}
public void Start(int bbm)
{
_timer.Stop();
_timer.Interval = TimeSpan.FromSeconds(60 / bbm);
_timer.Start();
}
public void Stop()
{
_timer.Stop();
_timer.Start();
}
}
public class Listener
{
public void Subscribe(Metronome m, MediaElement mmx)
{
m.Tick += (mm, e) => mmx.Play();
}
public void UnSubscribe(Metronome m, MediaElement mmx)
{
m.Tick += (mm, e) => mmx.Stop();
}
}
要启动节拍器,请使用以下代码:
l.Subscribe(m, mediaelement);
m.Start(120);
这完全没问题。
要停止节拍器,请使用以下代码:
l.UnSubscribe(m, mediaelement);
m.Stop();
节拍器停止但是如果我再次尝试重新启动,它就不会启动。我该怎么办?
感谢您的帮助。
我的问候......
答案 0 :(得分:1)
好的,你所做的就是你已经将你的节拍器订阅了两个处理程序,每个处理程序都发生在滴答计时器上。
首先,在Listener
类中创建一个静态方法作为可以删除的事件处理程序。
private static void TickPlay(object sender, EventArgs e)
{
mmx.Play();
}
然后,在您的Subscribe
方法中,只需说:
m.Tick += TickPlay;
最后,对于您的Unsubscribe
方法,请说:
m.Tick -= TickPlay;
这样它就不会继续播放/停止音阶间隔。
答案 1 :(得分:0)
我找到了解决方案。
我刚刚开始和停止方法做了一些小改动:
public void Start(int bbm)
{
_timer.Interval = new TimeSpan(0, 0, 0, 0, 500);
_timer.Start();
}
public void Stop()
{
_timer.Stop();
}
现在它完美无缺。
此致