2012-03-25 12 views
0

私は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

ジョンが正しい、しかし、あなたは

あなたはmainメソッドの中に、彼の主なメソッドを呼び出すこと、他とあなたの友人のアプリケーションをラップすることができ...汚い回避策を試みることができ、その後、メインウィンドウを見つけます(たとえば、Application.MainWindowを使用するWPFアプリケーションの場合)、そのウィンドウにサインアップします。

あなたのクラスのインスタンスを取得する必要があります。クラスのインスタンスの静的リストを追加することでこれを行うことができます。

この回避策は私が強く推奨するものではありませんが、動作する可能性があります。 (ウィンドウが閉じると、それはあなたのクラスへのアクセスを想定しているため、推奨しないが終了します。)

ビットより良いアプローチは、アプリケーションのイベントではなく窓(WPF eventWinforms event)を使用する場合と可能な場合。

あなたのクラスをホストするホストアプリケーションが実際にあなたの友人である場合、コードを紛失した場合、コードを再作成するための許可(Reflectorまたは同様のツールを使用)それを変更します。

5

あなたの友人は基本的に、自分のコードを変更する必要があります。私はこのような処分を使用することはできません

おかげ

あなたのクラスのインスタンスはもはや必要ではなく、IDisposableを実装することはまさに正しいアプローチです。あなたの友人がusingステートメントを使用するか、または彼のフォームが配置されているたときにそれを手動で廃棄終わるかどうか

は別の問題です。いずれにしても、変更が必要になります。

関連する問題