2

MVVM プロジェクトがあり、VM が破棄されたときにいくつかのメソッドを実行する必要があります。私はこれを試しています:

public class MyClass
{
    public void MyCleanUpmethod(object p)
    {
       // My Clean up proccess here 
       ....
    }       

    ~ MyClass()
    {
        MyCleanUpmethod(new object());
    }
}

私の問題は、~ MyClass()アプリケーション全体を閉じるときにのみ実行されることです。現在のプロセスで MyClass が使用されなくなったときに実行する必要があります。

ウィンドウが閉じたときに が使用されている場合、 のインスタンスが とは異なる他のもので使用されている場合、 も実行する必要がMyClassあることをDatacontext意味します。~ MyClass()MyClassDatacontext~ MyClass()

どうやってやるの ?

4

2 に答える 2

2

インターフェイスを確認する必要がありIDisposableます。次に、デストラクタ コードはDispose、独自のコードによって呼び出されるメソッドに入ります。または、スコープの最後でのusing呼び出しを処理するステートメントを使用できます。DisposeDispose パターンのクリーンな実装については、MSDN の記事を参照してください。

ファイナライザーの使用は適切ではありません。ガベージコレクターによって呼び出されるため、時間内にない可能性があります(あなたの場合のように)。

于 2013-10-27T15:31:51.073 に答える
1

マネージド コードにはデストラクタを使用しないでください。代わりに IDisposable を実装します。

public class MyClass : IDisposable
{
    public void MyCleanUpmethod(object p)
    {
       // My Clean up proccess here 
       ....
    }       

    public void Dispose()
    {
        MyCleanUpmethod(new object());
    }
}

次に、次のようにクラスを使用します。

using (var cls = new MyClass())
{
 //do stuff with cls
}
于 2013-10-27T15:33:18.823 に答える