我在silverlight应用程序中有一些会话管理代码。作为会话管理的一部分,如果用户闲置时间过长,我会自动将用户注销。当用户再次登录时,在上一个会话中打开的任何ChildWindow仍将打开。所有其他会话数据都会重置,因此ChildWindow实际上是孤立的。任何使用它的尝试都会引发错误。当我注销时如何杀死任何ChildWindows?
如何找到可能存在的子窗口并将其终止以便注销可以正常工作?我的第一个想法是从shell开始查看this.GetVisualDescendants().OfType<ChildWindow>();
的行。但是,在测试中,即使我打开了一个子窗口,这也是空的。
该应用程序是使用Prism&amp; amp;的一款超级C#应用程序。 MEF。
修改 - 添加更多细节/其他方式来表达问题:
所以程序流程就像:
我想添加到我的会话超时代码(甚至是登录后代码),找到任何打开的ChildWindow并关闭它,以防止这种情况导致错误。
答案 0 :(得分:0)
所以,我显然难倒每个人,或者更有可能没有让我的问题足够有趣。
我确实找到了解决这个问题的方法。我为应用程序中的所有子窗口创建了一个自定义基类。在该基类中,ChildWindows在静态列表中注册/取消注册(在Loaded / Unloaded事件处理程序中),可以用来获取对任何活动的ChildWindows的引用。