4

アプリケーションのシャットダウン中に常に失敗するように見えるファイナライザーがあります。これは、その時点で無効になっているネイティブリソースを保持しているためだと思います。デストラクタ/ファイナライザで、アプリケーションのシャットダウンが原因で呼び出されているかどうかを確認する方法はありますか?

ありがとう!

4

3 に答える 3

13
System.Environment.HasShutdownStarted

ここのドキュメント:http://msdn.microsoft.com/en-us/library/system.environment.hasshutdownstarted.aspx

于 2011-04-20T07:51:18.413 に答える
4

私はそれAppDomain.IsFinalizingForUnload()がこの情報を提供すると思います。

于 2011-04-20T07:52:39.990 に答える
1

それらがすでに他の方法で処分されている場合、本当にファイナライザーでそれらを処分する必要がありますか?
またはその逆:IDisposableパターンを介してそれらを破棄することはできませんか?

アプリの存続期間中保持しているリソースであっても、次のものを使用することができます。

static void Main()
{
  using(var yourResource = ...)
  {
     ...
     yourMainForm.YourResource = yourResource;
     Application.Run...
  }
}

編集:いくつかの興味深い答え[1]は別として、これは全体に何か問題があるように聞こえます。

リソースがすでに廃棄されているためにファイナライザーが失敗した場合は、どこかに問題があります。
このリソースを適切に廃棄することが重要な場合は、これを適切に行う必要があります。
「UIのどこかで参照されている」だけで十分かどうかはわかりません。これがフォームかそこらで行われたとしても、正しく理解するのはそれほど難しいことではありません。フォーム、コンポーネント、またはコントローラーのdisposeをオーバーライドして、決定論的に実行できます。

[1]いつか噛まれたら重宝するかも…。

于 2011-04-20T07:53:53.907 に答える