2012-01-19 8 views
1

私の基本的な問題はこれです。古いフォームが破損していると思ったときに問題を引き起こしているネットワークアクティビティに基づいて残ったページでイベントが発生しました。Silverlight/WP7 - 他のページで起動されるナビゲーションとイベント

詳細情報:ネットワークプレーヤーと通信するWindows Phoneアプリを作成しています。すべてのフォームが接続を共有できるように、私のAppクラスには通信クラスの静的インスタンスがあり、すべてのフォームはそのフォームにサブスクライブし、そのフォーム内の結果を処理します。メインメニューからは、1つのタイプのソースを選択して、ナビゲーション中にリストボックスをリフレッシュし、戻るボタンをキャンセルし、新しいコンテンツをリフレッシュしてルートフォルダになるまでファイルナビゲーションをシミュレートするファイルブラウジングフォームを開きます。アプリケーションは、ファイルやフォルダをクリックしているかどうかわからず、メディアが再生を開始し、それを監視してから「再生」フォームに移動すると、ネットワークメッセージが表示されます。私はこれまでにすべての.Navigateを使用していましたが、新しいソースのメインメニューから別のブランチを追加するまではうまくいきました。新しいソースはまったく違っていますが、デバイスは現在のコンテキストで他の何かを意味する多くの同じ汎用コマンドを送信します。私のファイルブラウザフォームにアクセスして新しいソースに行くと、ネットワークからの再生コマンド(これは今他のものを意味する)は、私が以前のソースから私の古い「再生」フォームにジャンプする原因になりますファイルブラウザの形式ではありません。

私は多くのことを試してきましたが、今はうまく動作していますが、メッセージであり、いくつかの機能を失います。現在、私はすべての.navigatesを、バックボタンのオーバーライドでも使用して、スタックとnavigate.gobackの使用を試みるように変更しました。アプリケーションのグローバルを使用して必要なときに変数を渡し、ネットのリスナーをフォームのgobackから外し、新しいフォームのリスナーにナビゲートします。私はタイミングの問題があると思うが、メディアボックスにコマンドを送信する必要がある場合があるため、間違ったイベントハンドラを再度トリガすることになった。私は、可能な限り最も簡単な解決法と考えています。しかし、それは動作するでしょうが、私が古いものから移動したとき、ハンドラなどがすべて破壊され、スタックをまったく使用する必要がない場合、すべてのバックボタンを自分で処理します。

私はそれが長い記述であることを知っています。あなたがこれをこれまでに作ってくれれば、感謝しています。誰でも私ができることについて何か提案がありますか?

サイドノートとして私は長い時間独学のVBプログラマで、.NET 2.0/winformsに悩まされています。私はC#、OOPs、XAMLに移行して、最初のWindows電話アプリなので、私は何か愚かなことをやっているか、何かを見落としている可能性が高いです...

答えて

0

何かがフォームへの参照を保持している可能性があります。最も一般的な原因はイベントハンドラです。だから、

、あなたの静的クラスでイベントを公開し、フォームにそのイベントをサブスクライブした場合、フォームは/がナビゲート閉じたとき、あなたはイベントの配信を停止しなければならない、そうでない場合は、フォームがメモリ内に残ります....

そうでない場合は、フォームへの参照を取得していて、それを解放していないものを探してください。

+0

私は正しい軌道に乗っていました。私はすべてを見て、私はイベントに参加していなかったので、終了していませんでした。スタックがより標準的なインターフェースでどのように役立つのかを見ることができますが、スタック内のどこかの場所にプレーヤーを挿入できる仮想ブラウザーでは混乱します – Jason

0

ほとんどの場合、UIからのコマンドの処理に関しては、アプリケーションアーキテクチャに問題がある可能性があります。

「現在のコンテキストで他の何かを意味するだけの同じ汎用コマンドをたくさん送信します」と言うとき。あなたはおそらく問題の原因を明らかにするでしょう。

回避策として、通信クラスが実装するインターフェイスを定義できます。各フォームには、通信クラスインスタンスで呼び出す独自のメソッドがあります。

実際に電話ページからコマンドを受信した場合、それは表示されなくなりました。処理しないでください。

通信履歴を保存して、通信クラスにコマンドを送信できるページが唯一のページであることを常に知ることができます。

関連する問題