我在Silverlight應用程序中有一些會話管理代碼。作爲會話管理的一部分,如果用戶空閒時間過長,我會自動將用戶登錄。當用戶再次登錄時,前一個會話中打開的任何ChildWindow仍將被打開。所有其他會話數據都被重置,因此ChildWindow被有效地孤立。任何嘗試使用它都會導致錯誤。我在註銷時如何殺死任何ChildWindows?如何關閉未知的子窗口?
如何找到可能存在的任何子窗口,並將其殺死,以便註銷可以正常工作?我的第一個想法是從shell中開始尋找this.GetVisualDescendants().OfType<ChildWindow>();
。然而,在測試中,即使我打開了一個子窗口,這也是空的。
該應用程序是一個silvelight C#應用程序使用棱鏡& MEF。
編輯 - 添加更多的細節/另一種方式表達出該問題:
所以程序流會是這樣的:
- 用戶登錄到Silverlight機應用。
- 用戶在應用程序中瀏覽並打開一個ChildWindow。
- 用戶放棄他們的電腦充值咖啡,結束了20分鐘的談話。
- 用戶的Silverlight「會話」超時。所有用戶特定的信息都將被丟棄,並顯示登錄窗口(另一個ChildWindow)。
- 用戶返回到計算機並看到登錄提示,登錄。
- 用戶看到他們在出去喝咖啡之前打開的ChildWindow。
- 用戶嘗試點擊ChildWindow中的某些內容並獲取錯誤,因爲ChildWindow在「會話」結束時丟棄了所有上下文。
我想添加到我的會話超時代碼(甚至是登錄後的代碼),找到任何打開的ChildWindow並關閉它,以防止這種情況導致錯誤。