我有完全相同的问题。我们有一个运行OOB的大型Silverlight应用程序。
出于某种原因,m_ClosingEvent在运行一段时间后是零。我一直无法找到这个问题的原因,但我认为这可能与我们改变根视觉或我们展示的所有子窗口有关。
我正在使用ApplicationWrapper类。
public class ApplicationWrapper : IApplicationWrapper
{
public void Initialize()
{
HookCloseEvent(true);
}
private void HookCloseEvent(bool hook)
{
if (hook && IsRunningOutOfBrowser)
{
Application.Current.MainWindow.Closing += OnClosing;
}
else
{
if (IsRunningOutOfBrowser)
{
Application.Current.MainWindow.Closing -= OnClosing;
}
}
}
private void OnClosing(object sender, ClosingEventArgs e)
{
InvokeClosing(e);
}
... etc..
}
而InvokeClosing方法从未被调用过。但是当我将其更改为
public class ApplicationWrapper : IApplicationWrapper
{
private Window _mainWindow;
public void Initialize()
{
if(IsRunningOutOfBrowser)
{
_mainWindow = Application.Current.MainWindow;
}
HookCloseEvent(true);
}
private void HookCloseEvent(bool hook)
{
if (hook && IsRunningOutOfBrowser)
{
_mainWindow.Closing += OnClosing;
}
else
{
if (IsRunningOutOfBrowser)
{
_mainWindow.Closing -= OnClosing;
}
}
}
private void OnClosing(object sender, ClosingEventArgs e)
{
InvokeClosing(e);
}
... etc...
}
m_ClosingEvent未被清除。
因此,试着将“初始”MainWindow存储在一个字段中,并检查是否可以解决您的问题。
听起来像一个非常好的问题。我首先使用的诊断是创建一个简单的OOB应用程序(不需要校准等),只需打开和关闭ChildWindows并将RootVisuals交换出来以查看是否可以创建简单的repro。 – AnthonyWJones 2010-08-28 16:21:41
好的,我有同样的问题 - 只要我不打开/关闭ChildWindow,那么关闭事件触发。有时候,如果我连接了调试器,它也会启动,但并非总是如此。我尝试了下面的ApplicationWrapper,没有任何快乐。有什么建议么?! – Rodney 2011-04-04 04:30:14