我在WPF代码中有一个成员是一次性的(这意味着它实现了IDisposable接口)。
在WPF中,我看不到任何可以从UserControl重写的处置方法,因此我可以在wpf用户控件中释放成员。
在WPF用户控件中释放成员的正确方法是什么?
它是一个用户控件,它封装了实现IDisposable接口的私有成员。因此,我需要在某个地方处置那个成员。在传统的winform中,usercontrol有一个可以被覆盖的Dispose方法,以便在覆盖中我可以释放私有成员。但是在WPF用户控件中,没有这样的东西。因此,我想知道在哪里可以释放wpf用户控件中的私有成员。
我的问题不是处理用户控件,而是在哪里释放一个实现接口的私有成员。
发布于 2010-09-10 15:16:41
您可以使用UserControl的卸载事件来进行资源清理。
发布于 2010-11-18 22:28:36
您可以在Dispatcher.ShutDownStarted事件处理程序中这样做。有关详细信息,请参阅这个问题 (这反过来指的是这篇博客文章)。
发布于 2010-09-10 15:36:23
更新
当您调用实现IDisposable的私有成员时,可以使用using吗?这样,它就会自动被处理掉。我个人还没有在UserControl中这样做,但它可能会起作用。例如:
using( MyPrivateDisposable mpd = new MyPrivateDisposable) {
mpd.MethodA();
}旧答案
如果不能调用Dispose(),问题是您的UserControl不能从Disposable()继承。UserControl本身并不是从它派生的,因此您必须显式地使您的WPF控件从它继承,即
public class MyControl : UserControl, IDisposable {...}请参见此处的UserControl基类型:

一旦实现了IDisposable,就可以调用它。但是当我在评论中提到你的问题时,我认为你需要发布更多关于这门课的信息。问问你自己,如果你真的需要叫处分().也就是说,您的UserControl访问是处理还是使用非托管代码?如果不是,我不明白为什么要调用don(),除非您真的希望GC清理它。
https://stackoverflow.com/questions/3685636
复制相似问题