【问题标题】:Strange in ShakeGesture Library on Windows Phone ApplicationWindows Phone 应用程序上 ShakeGesture 库中的奇怪现象
【发布时间】: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 将在第二个执行。 当我使用断点时,我知道这个错误。 有谁知道如何解决这个问题?谢谢之前:)

【问题讨论】:

    标签: c# windows-phone-7 xna shake


    【解决方案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)
      猜你喜欢
      • 2015-04-03
      • 2014-07-21
      • 1970-01-01
      • 2013-02-11
      • 2016-02-24
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      相关资源
      最近更新 更多