Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows应用商店应用程序节拍器停止按钮不工作_C#_Windows Store Apps - Fatal编程技术网

C# Windows应用商店应用程序节拍器停止按钮不工作

C# Windows应用商店应用程序节拍器停止按钮不工作,c#,windows-store-apps,C#,Windows Store Apps,您好,我正在开发Windows应用商店应用程序 首先,这是我的代码: public class TickArgs : EventArgs { public DateTime Time { get; set; } } public class Metronome { private DispatcherTimer _timer; public event TickHandler Tick; public delegate void TickHandler(Metr

您好,我正在开发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();
这个很好用

要停止节拍器,我使用以下代码:

l.Subscribe(m, mediaelement);
m.Start(120);
l.UnSubscribe(m, mediaelement);
m.Stop();
节拍器停止,但如果我尝试再次启动,它就不会启动。我该怎么办

我将感谢你的帮助


我的问候…

好的,那么您所做的就是将您的节拍器订阅给两个处理程序,每个处理程序都发生在滴答计时器上

首先,在
Listener
类中创建一个静态方法,作为可以删除的事件处理程序

private static void TickPlay(object sender, EventArgs e)
{
    mmx.Play();
}
然后,在
Subscribe
方法中,只需说:

m.Tick += TickPlay;
最后,对于您的
取消订阅
方法,请说:

m.Tick -= TickPlay;

这样,它就不会继续播放/停止任何滴答声间隔。

好的,那么您所做的就是将节拍器订阅给两个处理程序,每个处理程序都发生在滴答声计时器上

首先,在
Listener
类中创建一个静态方法,作为可以删除的事件处理程序

private static void TickPlay(object sender, EventArgs e)
{
    mmx.Play();
}
然后,在
Subscribe
方法中,只需说:

m.Tick += TickPlay;
最后,对于您的
取消订阅
方法,请说:

m.Tick -= TickPlay;
这样,它就不会继续播放/停止任何滴答声间隔。

我找到了解决方案

我刚刚对启动和停止方法做了一些小改动:

public void Start(int bbm)
{
    _timer.Interval = new TimeSpan(0, 0, 0, 0, 500);
    _timer.Start();
}
public void Stop()
{
    _timer.Stop();
}
现在它工作得非常好

我找到了解决办法

我刚刚对启动和停止方法做了一些小改动:

public void Start(int bbm)
{
    _timer.Interval = new TimeSpan(0, 0, 0, 0, 500);
    _timer.Start();
}
public void Stop()
{
    _timer.Stop();
}
现在它工作得非常好


关于

为什么在
Stop()
方法中停止计时器后立即启动计时器?此外,订阅和取消订阅似乎总是在添加处理程序,而从不删除它们。这是有意的吗?您可能想调查一下类似“虚弱的唐德勒”之类的问题。@NateDiamond您好,谢谢您的回答。但是,如果停止计时器后不启动计时器,则声音文件不会停止播放。关于订阅和取消订阅,这不是有意的。可能是因为这个原因,我应该怎么做来修复它?我真的搞不懂。为什么在
Stop()
方法中停止计时器后立即启动计时器?而且,订阅和取消订阅似乎总是在添加处理程序,而从不删除它们。这是有意的吗?您可能想调查一下类似“虚弱的唐德勒”之类的问题。@NateDiamond您好,谢谢您的回答。但是,如果停止计时器后不启动计时器,则声音文件不会停止播放。关于订阅和取消订阅,这不是有意的。可能是因为这个原因,我应该怎么做来修复它?我真的搞不懂发生了什么事?不是又开始了吗?它不是在建吗?它不识别mmx,但我修复了它。当它开始工作时,它就是不停。什么都没发生:(发生了什么事?它不是又开始了吗?它不是在建吗?它没有识别mmx,但我修复了它。当它开始工作时,它就是不停止。什么都没发生:(