Silverlightアプリケーションにいくつかのセッション管理コードがあります。そのセッション管理の一環として、ユーザーが長時間アイドル状態になっている場合は、ユーザーを自動的にログアウトします。ユーザーが再度ログインすると、前のセッションで開いていたChildWindowは引き続き開いたままになります。ただし、他のすべてのセッションデータはリセットされるため、ChildWindowは事実上孤立しています。それを操作しようとすると、エラーがスローされます。ログアウトするときにChildWindowsを強制終了するにはどうすればよいですか?
存在する可能性のある子ウィンドウを見つけて、ログアウトを正しく機能させるためにそれを強制終了するにはどうすればよいですか?this.GetVisualDescendants().OfType<ChildWindow>();
私の最初の考えは、シェルからの線に沿って見始めることです。ただし、テストでは、子ウィンドウを開いていてもこれは空でした。
このアプリは、Prism&MEFを使用したSilvelight C#アプリです。
編集-詳細を追加/質問を表現する別の方法:
したがって、プログラムフローは次のようになります。
- ユーザーがSilverlightアプリケーションにログインします。
- ユーザーはアプリ内を移動し、ChildWindowを開きます。
- ユーザーはコーヒーを補充するためにコンピューターを放棄し、20分間の会話に終わります。
- ユーザーのSilverlight「セッション」がタイムアウトします。ユーザー固有の情報はすべて破棄され、ログインウィンドウ(別のChildWindow)が表示されます。
- ユーザーがコンピューターに戻り、ログインプロンプトが表示されたら、ログインします。
- ユーザーは、コーヒーに向かう直前に開いたチャイルドウィンドウを確認します。
- 「セッション」が終了したときにChildWindowが持っていたすべてのコンテキストが破棄されたため、ユーザーがChildWindowで何かをクリックしようとすると、エラーが発生します。
エラーにつながるこの状況を防ぐために、セッションタイムアウトコード(またはログイン後のコード)に、開いているChildWindowを見つけて閉じるコードを追加したいと思います。