实际上,我正在尝试通过从我的ViewModel
触发事件来关闭窗口。一切都很好,但我知道我必须取消订阅事件以避免内存泄漏。因此,我实现了IDisposable
接口,并在Dispose
方法中取消订阅事件。
以下是我的代码:
public partial class MainWindow : Window, IDisposable
{
private MainViewModel viewModel;
public MainWindow()
{
InitializeComponent();
DataContext = viewModel = new MainViewModel();
this.viewModel.RequestClose += CloseWindow;
}
void CloseWindow(object sender, EventArgs e)
{
this.Close();
}
public void Dispose()
{
////here we need to unsubscribe the event
this.viewModel.RequestClose -= this.CloseWindow;
}
}
我需要知道:
- 这段代码是否正确
- 垃圾回收器(
GC
)何时调用并执行dispose方法 - 是否有更好的方法来完成这件事
IDispose
实现。(https://dev59.com/2WMl5IYBdhLWcg3wgnSl,http://www.codeproject.com/Articles/15360/Implementing-IDisposable-and-the-Dispose-Pattern-P) - Stefan