这是我的问题:
在我的WPF应用程序中,我有一个MyBaseControl
(派生自System.Windows.Controls.ContentControls
)和许多来自MyCustomControls
的{{1}}。我需要为我的所有MyBaseControl
做一些存储和清理操作,因为应用程序已关闭。
这是一些代码:
MyCustomControls
在public abstract class MyBaseControl : ContentControl
{
// Do some smart stuff.
}
App.Exit += new System.Windows.ExitEventHandler(App.App_OnExit);
我做了最后需要完成的操作。
我试图在App_OnExit()
的析构函数中执行清理操作,但这是在MyBaseControl
之后调用的。与App_OnExit()
相同的问题。
当我通过ALT + F4退出应用程序时,AppDomain.CurrentDomain.ProcessExit
和ContentControl.Closed
事件不会发生。
我可以在哪里进行清理操作?
答案 0 :(得分:2)
我可以在哪里进行清理操作?
在控件的父窗口的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...
}
}
答案 1 :(得分:0)
您可以将它放到您的应用程序类中:
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;
}
}