0

Windows Phone のシェイクジェスチャ ライブラリに問題があります。揺れる音が消えて、うまく動作するアプリケーションを作成しましたが、奇妙なバグが私を混乱させました。私はそれの 2 ページを持っています。これは私の分離されたコードです:

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 で Instance_ShakeGesture2 を振ると音楽を再生する手順です。ページ 1 を振ると Instance_ShakeGesture1 が実行され、ページ 2 に移動しようとすると実行されます。 Instance_ShakeGesture1 が先で、Instance_ShakeGesture2 が先です。最初にページ 2 を振ろうとすると、問題は同じになり、ページ 1 よりも Instance_ShakeGesture2 が最初に実行され、Instance_ShakeGesture2 が 2 番目に実行されます。ブレークポイントを使用すると、このバグを知っています。誰でもこの問題を解決する方法を知っていますか? 前にありがとう:)

4

3 に答える 3

1

これを試してください、それは私のために働いた、

protected override void OnBackKeyPress(CancelEventArgs e)
{
    e.Cancel = false;
    ShakeGesturesHelper.Instance.ShakeGesture -= new EventHandler<ShakeGestureEventArgs>(Instance_ShakeGesture1);
}

最初のページを離れるときにイベントを削除する必要があるためです。したがって、戻るキー ボタンが押されたときに hakeGestureEventArgs を消去できます。

于 2014-01-29T10:09:36.967 に答える
1

2 番目のページに移動したときに、イベント Instance_ShakeGesture1 がまだアクティブになっている可能性があります。試す

Instance.ShakeEvent -= new EventHandler(Instance_ShakeGesture1);

Instance_ShakeGesture1 メソッド内。

于 2012-08-22T09:56:13.600 に答える
0

わかりました。複数回機能する必要があることを知りませんでした。

これを試して、うまくいくかどうか教えてください:

追加したのと同じコード行をOnNavigatedFromメソッド内に記述し、現在のmethod('Instance_ShakeGesture2')

于 2012-08-27T07:31:24.030 に答える