【发布时间】:2013-09-05 03:04:01
【问题描述】:
您好,我正在开发 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();
节拍器停止但是如果我尝试重新开始,它只是不启动。我该怎么办?
感谢您的帮助。
我的问候...
【问题讨论】:
-
为什么
Stop()方法中停止定时器后立即启动定时器? -
此外,您的订阅和取消订阅似乎总是在添加处理程序,而从不删除它们。这是故意的吗?你可能想研究一下 WeakEventHandler 之类的东西。
-
@NateDiamond 您好,感谢您的回答。但是,如果我在停止计时器后不启动计时器,则声音文件不会停止播放。关于订阅和取消订阅,不是有意的。可能是因为这个错误,我应该怎么做才能修复它?我真的想不通。
标签: c# windows-store-apps