3

私たちの WinForms アプリケーションは、ときどき自然に終了することが報告されています。私たち自身のクラッシュ エラー送信ダイアログも Windows のエラー送信ダイアログも表示しません。多くの場合、人が afk でアプリケーションで何もしていないときに、閉じて消えます。月に 2 ~ 3 回のような、かなりまれな発生のようで、複数の人に発生しています。どこから再現ケースを入手すればよいのか、どこから追跡を開始すればよいのかわかりません。

C# .NET 2.0 報告されたケースは Win XP でのものです

誰にもアイデアはありますか?

4

3 に答える 3

4

無限再帰によるスタック オーバーフローは、アプリが警告なしで終了する大きな原因です。サイレント終了を引き起こすために意図的な何かを行っていない限り、ハンドルされない例外 (スタック オーバーフロー以外) は通常、アプリが終了する前に何らかの UI を表示します。スタック オーバーフローは、この規則の最も一般的な例外です (申し訳ありません)。

もちろん、管理されていないコードや安全でないコードから、サイレント終了を引き起こす正しい方法でランタイムを混乱させる可能性はほぼ確実にあります。

インストルメンテーションと Windows イベント ログの確認に関する提案も適切です。

于 2008-10-14T15:43:20.560 に答える
3

例外により、アプリが「消える」ことになります。イベント ログをチェックして、何かあったかどうかを確認します。

タスク マネージャーをチェックして、ウィンドウが消えたときにプロセスがまだ存在しているかどうかを確認します。エクスプローラーがクラッシュし、Alt-Tabbed または Switched-To (タスク マネージャーから) になるまでウィンドウを再描画できませんでした。

ユーザーがアプリを閉じていることを便利に忘れるために、ユーザーの前に置いてはいけません。ユーザーが開始した閉鎖をログに記録するために、アプリにログ ロジックを配置することができます。次回「消える」ときは、ログエントリを確認できます。

于 2008-10-14T15:26:18.563 に答える
0

FormClosing イベントにいくつかのロジックを追加して、それが本当にやりたいことかどうかをユーザーに尋ねることができます。その後、終了イベントをキャンセルすることができ、問題がなければアプリケーションは引き続き実行されます。この問題に気づき続け、ロジックがまったく実行されない場合は、デバッガーで手を汚す必要があります。

于 2008-10-14T15:32:54.947 に答える