在处理我的实例之前做一些动作

时间:2012-03-25 11:35:42

标签: c#

我开发了一个编译成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);
    }
} 

2 个答案:

答案 0 :(得分:5)

你的朋友基本上需要更改他的代码 - 如果你想在不再需要你的类的实例时在代码中执行一些清理,那么实现IDisposable就是正确的方法。

您的朋友是否使用using语句或在他的表单处理时最终手动处理它是另一回事。无论哪种方式,都需要进行更改。

答案 1 :(得分:0)

Jon是正确的,但是,你可以尝试一种肮脏的解决方法......

你可以将你的朋友应用程序包装成另一个,在main方法中调用他的main方法,然后找到主窗口(例如,如果它是使用Application.MainWindow的WPF应用程序),然后注册到那个窗口关闭事件。

你仍然需要获得你班级的实例。您可以通过向类中添加静态实例列表来完成此操作。

这种解决方法不是我强烈建议的,但它可以工作。 (不推荐使用,因为它假定在窗口关闭时对您的类的访问结束。)

如果可能的话,更好的方法是使用应用程序事件而不是窗口(WPF eventWinforms event)。

如果主机应用程序(托管您的班级)真的是您的朋友,您可以要求他更改它,或者,如果他丢失了代码,则允许重新创建代码(使用Reflector或类似工具)和修改它。