And*_*vey 6 silverlight silverlight-4.0
我已经制作了一个相当复杂的Silverlight 4浏览器外应用程序.我的一个主视图模型为Application.Current.MainWindow.Closing事件添加了一个事件处理程序.这在最初运行应用程序时工作正常.它可以取消关闭操作.
但是,有时在执行显示和关闭ChildWindow等操作后,MainWindow的Closing事件不再调用我的处理程序.
在调试器中,我向MainWindow的底层结束事件委托添加了一个监视.在显示ChildWindow之前它不是null.然后有时在关闭ChildWindow后,委托为空.这就解释了为什么我的处理程序不再被调用.但为什么这个代表被搞砸了呢?为什么它偶尔会发生?我的应用程序不会在任何时候取消绑定我的事件处理程序.
这是我正在观看的代表:
System.Windows.Application.Current.MainWindow.m_closingEvent
Run Code Online (Sandbox Code Playgroud)
其他的东西:我正在使用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..
}
Run Code Online (Sandbox Code Playgroud)
并且从未调用过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...
}
Run Code Online (Sandbox Code Playgroud)
m_ClosingEvent没有空.
因此,尝试将"初始"MainWindow存储在一个字段中,并检查是否能解决您的问题.
| 归档时间: |
|
| 查看次数: |
3433 次 |
| 最近记录: |