在 App.Exit 之前挂钩
Hook in befor App.Exit
这是我的问题:
在我的 WPF 应用程序中,我有一个 MyBaseControl
(派生自 System.Windows.Controls.ContentControls
)和许多派生自 MyBaseControl
的 MyCustomControls
。在关闭应用程序之前,我需要对所有 MyCustomControls
执行一些存储和清理操作。
这是一些代码:
public abstract class MyBaseControl : ContentControl
{
// Do some smart stuff.
}
App.Exit += new System.Windows.ExitEventHandler(App.App_OnExit);
在 App_OnExit()
中,我执行了最后需要完成的操作。
我尝试在 MyBaseControl
的析构函数中执行清理操作,但这是在 App_OnExit()
之后调用的。 AppDomain.CurrentDomain.ProcessExit
.
同样的问题
当我通过 ALT+F4 退出应用程序时,ContentControl.Closed
和 ContentControl.Unloaded
事件没有发生。
我可以在哪里进行清理操作?
Where can I hook in to do my cleanup operations?
在控件的父 window 的 Closing
事件处理程序中:
public abstract class MyBaseControl : ContentControl
{
public MyBaseControl()
{
Loaded += MyBaseControl_Loaded;
}
private void MyBaseControl_Loaded(object sender, RoutedEventArgs e)
{
Window parentWindow = Window.GetWindow(this);
parentWindow.Closing += ParentWindow_Closing;
Loaded -= MyBaseControl_Loaded;
}
private void ParentWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
//cleanup...
}
}
你可以把它放到你的应用程序中 class:
public delegate void TimeToCleanUpEventHandler();
public event TimeToCleanUpEventHandler TimeToCleanUp;
修改退出事件处理程序:
App.Current.Exit += ((o, e) => { TimeToCleanUp?.Invoke(); App.App_OnExit(o, e); });
并修改您的基础控件:
public abstract class MyBaseControl : ContentControl
{
public MyBaseControl()
{
(App.Current as MyApp).TimeToCleanUp += CleanItUp;
}
public virtual void CleanItUp()
{
(App.Current as MyApp).TimeToCleanUp -= CleanItUp;
//do stuff;
}
}
这是我的问题:
在我的 WPF 应用程序中,我有一个 MyBaseControl
(派生自 System.Windows.Controls.ContentControls
)和许多派生自 MyBaseControl
的 MyCustomControls
。在关闭应用程序之前,我需要对所有 MyCustomControls
执行一些存储和清理操作。
这是一些代码:
public abstract class MyBaseControl : ContentControl
{
// Do some smart stuff.
}
App.Exit += new System.Windows.ExitEventHandler(App.App_OnExit);
在 App_OnExit()
中,我执行了最后需要完成的操作。
我尝试在 MyBaseControl
的析构函数中执行清理操作,但这是在 App_OnExit()
之后调用的。 AppDomain.CurrentDomain.ProcessExit
.
当我通过 ALT+F4 退出应用程序时,ContentControl.Closed
和 ContentControl.Unloaded
事件没有发生。
我可以在哪里进行清理操作?
Where can I hook in to do my cleanup operations?
在控件的父 window 的 Closing
事件处理程序中:
public abstract class MyBaseControl : ContentControl
{
public MyBaseControl()
{
Loaded += MyBaseControl_Loaded;
}
private void MyBaseControl_Loaded(object sender, RoutedEventArgs e)
{
Window parentWindow = Window.GetWindow(this);
parentWindow.Closing += ParentWindow_Closing;
Loaded -= MyBaseControl_Loaded;
}
private void ParentWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
//cleanup...
}
}
你可以把它放到你的应用程序中 class:
public delegate void TimeToCleanUpEventHandler();
public event TimeToCleanUpEventHandler TimeToCleanUp;
修改退出事件处理程序:
App.Current.Exit += ((o, e) => { TimeToCleanUp?.Invoke(); App.App_OnExit(o, e); });
并修改您的基础控件:
public abstract class MyBaseControl : ContentControl
{
public MyBaseControl()
{
(App.Current as MyApp).TimeToCleanUp += CleanItUp;
}
public virtual void CleanItUp()
{
(App.Current as MyApp).TimeToCleanUp -= CleanItUp;
//do stuff;
}
}