一尘不染

处置WPF用户控件

c#

我已经创建了一个供第三方使用的自定义WPF用户控件。我的控件有一个私有成员,该成员是可抛弃的,并且我想确保一旦关闭包含窗口/应用程序后,将始终调用其dispose方法。但是,UserControl不是一次性的。我尝试实现IDisposable接口并订阅Unloaded事件,但是在主机应用程序关闭时都未调用。如果有可能,我不想依靠我的控件的使用者记住要调用特定的Dispose方法。

 public partial class MyWpfControl : UserControl
 {
     SomeDisposableObject x;

     // where does this code go?
     void Somewhere() 
     {
         if (x != null)
         {
             x.Dispose();
             x = null;
         }

     }
 }

到目前为止,我发现的唯一解决方案是订阅Dispatcher的ShutdownStarted事件。这是合理的方法吗?

this.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted;

阅读 334

收藏
2020-05-19

共1个答案

一尘不染

有趣的博客文章在这里:

http://geekswithblogs.net/cskardon/archive/2008/06/23/dispose-of-a-wpf-
usercontrol-
ish.aspx

它提到了订阅Dispatcher.ShutdownStarted来处理资源。

2020-05-19