我开发了一个编译成dll的类,我的朋友使用这个dll并创建了我的类的实例。
当用户关闭我朋友的程序(GUI)时,我想用我的局部变量做一些动作。
我尝试过析构函数,但这不是确定性的。
我朋友的程序不包含using
,无法再次编译此程序,因此我无法使用dispose
方法。
知道如何以另一种方式做到这一点吗?
谢谢
我不能像这样使用处理:
using System;
using System.Text;
class Program
{
static void Main()
{
// Use using statement with class that implements Dispose.
using (SystemResource resource = new SystemResource())
{
Console.WriteLine(1);
}
Console.WriteLine(2);
}
}
class SystemResource : IDisposable
{
public void Dispose()
{
// The implementation of this method not described here.
// ... For now, just report the call.
Console.WriteLine(0);
}
}
答案 0 :(得分:5)
你的朋友基本上需要更改他的代码 - 如果你想在不再需要你的类的实例时在代码中执行一些清理,那么实现IDisposable
就是正确的方法。
您的朋友是否使用using
语句或在他的表单处理时最终手动处理它是另一回事。无论哪种方式,都需要进行更改。
答案 1 :(得分:0)
Jon是正确的,但是,你可以尝试一种肮脏的解决方法......
你可以将你的朋友应用程序包装成另一个,在main方法中调用他的main方法,然后找到主窗口(例如,如果它是使用Application.MainWindow的WPF应用程序),然后注册到那个窗口关闭事件。
你仍然需要获得你班级的实例。您可以通过向类中添加静态实例列表来完成此操作。
这种解决方法不是我强烈建议的,但它可以工作。 (不推荐使用,因为它假定在窗口关闭时对您的类的访问结束。)
如果可能的话,更好的方法是使用应用程序事件而不是窗口(WPF event和Winforms event)。
如果主机应用程序(托管您的班级)真的是您的朋友,您可以要求他更改它,或者,如果他丢失了代码,则允许重新创建代码(使用Reflector或类似工具)和修改它。