アプリケーションが C#/.Net で適切にシャットダウンされないようにしているアライブ スレッドを検出する方法があるかどうか疑問に思っています。つまり、ユーザーがアプリケーションを閉じた後も、そのインスタンスはタスク マネージャーに表示されたままになります。
4 に答える
Visual Studio でプログラムをデバッグ モードで実行します。プログラムがまだ実行されている場合にGUIを閉じると、デバッグモードが一時停止します。これにより、プログラムがどこにあるかがわかります。プログラムをデバッグ モードで実行しているときに詳細を表示するには、[DEBUG] > [Windows] > [Thread Window] に移動します。これにより、プログラムが生成したすべてのスレッドが表示されます。 これはあなたを助けることができるかもしれません.
次のようなウィンドウが表示されますhttp://mscerts.programming4.us/image/201307/Debugging%20with%20Visual%20Studio%202010_7.jpg
スレッド ウィンドウの使用方法とマルチスレッド アプリケーションのデバッグ方法の詳細については、
作成されたすべてのスレッドをListなどのコンテナーに保存し、終了時にIsAliveおよびThreadStateプロパティを確認することができます。
スレッドの保持を気にしないもう 1 つのオプションは、IsBackgroundプロパティをfalseに設定することです。また、ThreadPoolまたはTaskを使用する場合、スレッドは常にバックグラウンド スレッドであり、 Threadを手動で作成する代わりにこれらのクラスを使用することをお勧めします。
(ちなみに、アプリケーションの種類と終了の理由に関する詳細情報が役立つでしょう。)
アクティブなスレッドのリストがあっても、コール スタックが利用できないためにトレースできないスレッドがあります。
さらに、アプリケーションを正常にシャットダウンしたいだけです。そのため、アプリケーションに次の変更を加えました。
1. App.StartUp() で
シャットダウンモードの設定
protected override void OnStartup(StartupEventArgs e)
{
Current.ShutdownMode = ShutdownMode.OnMainWindowClose;
}
ユーザーが閉じるボタンをクリックすると、次の関数が呼び出されます
Application.Current.Shutdown();
乾杯。