我制作了一个相当复杂的 Silverlight 4 浏览器外应用程序。我的主视图模型之一向 Application.Current.MainWindow.Closing 事件添加了一个事件处理程序。
当应用程序最初运行时,这工作得很好。它可以取消关闭操作。
然而,有时执行显示和关闭 ChildWindow 等操作后,MainWindow 的 Closing 事件不再调用我的处理程序。
在调试器中,我向 MainWindow 的底层关闭事件委托添加了一个监视。在显示 ChildWindow 之前它不为 null。然后有时ChildWindow 关闭后,委托为 null。这解释了为什么我的处理程序不再被调用。但为什么这个代表会被取消呢?为什么这种情况只是偶尔发生?
我的应用程序在任何时候都不会解除我的事件处理程序的绑定。
这是我正在观看的代表:
System.Windows.Application.Current.MainWindow.m_closingEvent
其他东西:我正在使用 Caliburn Micro
我有同样的问题。我们有一个运行 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 存储在字段中,然后检查是否可以解决您的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)