Windows Phone 应用程序上 ShakeGesture 库中的奇怪现象

Posted

技术标签:

【中文标题】Windows Phone 应用程序上 ShakeGesture 库中的奇怪现象【英文标题】:Strange in ShakeGesture Library on Windows Phone Application 【发布时间】:2012-08-19 12:58:17 【问题描述】:

我在使用 windows phone 摇动手势库时遇到了问题。 我构建了一个应用程序,它的震动声音会消失,它的工作很好,但奇怪的错误让我感到困惑。我有两页。这是我的单独代码:

void Instance_ShakeGesture1(object sender, ShakeGestureEventArgs e)
                
        Stream stream = TitleContainer.OpenStream("Sounds/C.wav");
        effect = SoundEffect.FromStream(stream);
        effectInstance = effect.CreateInstance();
        if (effectInstance.State != SoundState.Playing || effectInstance == null)
        
            FrameworkDispatcher.Update();
            effectInstance.Play();
        

        else if (effectInstance.State == SoundState.Playing || effectInstance != null)
        
            effectInstance.Stop();
        
    

    void Instance_ShakeGesture2(object sender, ShakeGestureEventArgs e)
    
        Stream stream = TitleContainer.OpenStream("Sounds/D.wav");
        effect = SoundEffect.FromStream(stream);
        effectInstance = effect.CreateInstance();
        FrameworkDispatcher.Update();
        if (effectInstance.State == SoundState.Stopped || effectInstance == null)
        
            effectInstance.Play();
        

        else if (effectInstance.State == SoundState.Playing || effectInstance != null)
        
            effectInstance.Stop();
        
    

Instance_ShakeGesture1 是我在第 1 页摇动时播放音乐的程序,在第 2 页中播放 Instance_ShakeGesture2。 摇晃时出现了奇怪的错误,如果我摇动第 1 页 Instance_ShakeGesture1 将在之后执行,我尝试移至第 2 页并且我摇动它将首先执行 Instance_ShakeGesture1,然后再执行 Instance_ShakeGesture2。 当我尝试先摇动第 2 页而不是第 1 页时,问题也一样,Instance_ShakeGesture2 将首先执行,Instance_ShakeGesture2 将在第二个执行。 当我使用断点时,我知道这个错误。 有谁知道如何解决这个问题?谢谢之前:)

【问题讨论】:

【参考方案1】:

当您导航到第二页时,可能事件 Instance_ShakeGesture1 仍处于活动状态。试试

Instance.ShakeEvent -= new EventHandler(Instance_ShakeGesture1);

在 Instance_ShakeGesture1 方法中。

【讨论】:

【参考方案2】:

试试这个,它对我有用,

protected override void OnBackKeyPress(CancelEventArgs e)

    e.Cancel = false;
    ShakeGesturesHelper.Instance.ShakeGesture -= new EventHandler<ShakeGestureEventArgs>(Instance_ShakeGesture1);

因为您应该在离开第一页时删除事件。因此,您可以在按下后退键按钮时清除 hakeGestureEventArgs。

【讨论】:

欢迎您!我建议多解释一下您的解决方案,以便更容易理解您的建议以及为什么它可以解决问题,而不仅仅是删除代码。 你也应该在下面添加乔的答案【参考方案3】:

好吧,我的错。不知道你需要它多次工作。

试试这个,如果效果好,请告诉我:

OnNavigatedFrom 方法中编写您添加的同一行代码,然后从您当前的method('Instance_ShakeGesture2') 中删除它

【讨论】:

很抱歉,我也觉得是我的错,我忘了告诉你我对每个页面都使用了枢轴项,以及我如何在枢轴项中使用 OnNavigatedFrom 方法? 好的。在这种情况下,您可以在数据透视页面上使用SelectionChanged 事件并检查 SelectedIndex。 if(SelectedIndex==1) 使用 '-=' 代码删除您的 ShakeGesture1 事件并同样遵循 if(SelectedIndex==0)

以上是关于Windows Phone 应用程序上 ShakeGesture 库中的奇怪现象的主要内容,如果未能解决你的问题,请参考以下文章

windows phone 上退出应用程序后恢复音乐

在Windows Phone上访问快速通知的数量

windows phone 7 让应用程序在后退按钮上运行

在 windows phone 8 上开始使用即时消息

Windows Phone 应用程序上 ShakeGesture 库中的奇怪现象

演示Windows Phone 7在监视器上