У меня была точно такая же проблема.У нас есть большое приложение Silverlight, работающее на OOB.
По какой-то причине 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 в поле и проверить, решает ли это вашу проблему.