我有完全相同的問題。我們有一個運行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