0

Windows モバイル デバイス - Motorola ES400 用の .net cf アプリケーションを開発しています。

アプリケーションは、処理されたすべての例外と、Main メソッドでアプリケーションのグローバル スコープに登録された未処理のグローバル例外を記録するログ ファイルを保持します。

何らかの理由で、電話でアプリケーションを実行しているときに、アプリケーションがフリーズしました。つまり、アプリケーションのボタンをクリックしたり、スタイラスで他のアクションを実行したりできませんでした。アプリケーションはまったく応答しませんでした。電話の Windows Mobile OS の [スタート] メニュー -> [タスク マネージャー] に戻り、アプリケーションを閉じようとしたときに、できませんでした。タスク マネージャーはアプリケーションを閉じません。ログを確認したところ、ハンドルされていないグローバル例外ルーチンを登録することで、ハンドルされていない例外がログに記録されていませんでした。

ここで何が問題なのかわかりません。

.NET CF での経験に基づいて、何が起こったのかについて何か考えている人はいますか? どこから調べたり分析したりできますか?

助けてくれてありがとう。

サブブ

4

4 に答える 4

2

多くの理由が考えられます。私の経験では、無限ループがあるか、ロックされたリソースへの呼び出しが発生していると思います。このようなシナリオでは、CLR Profiler for .NET CF を使用してみてください。CLR Profiler は、何がどこで問題になっているのかを示します。ここから入手できます: http://www.microsoft.com/en-us/download/details.aspx?id=13442 使用方法については、一連のブログ投稿があります。 blogs.msdn.com/b/stevenpr/archive/2008/05/08/the-clr-profiler-for-the-net-compact-framework-series-index.aspx

お役に立てば幸いです。

于 2012-09-12T16:59:54.527 に答える
0

このエラーをキャッチしてログに記録するだけの場合は、プログラムのメイン関数でtry...catchコードを囲みます。

Program.csC# では、これは単に次のようなものから編集するだけです。

static void Main() {
  Application.Run(new Form1());
}

このようなものに:

private static Form1 m_form;

static void Main() {
  try {
    m_form = new Form1();
    Application.Run(m_form);
  } catch (Exception err) {
    // log error
    if ((m_form != null) && !m_form.IsDisposed) {
      // you might want to save data on your form before it goes Bye-Bye.
    }
  }
}
于 2012-09-17T16:38:25.627 に答える
0

少し前にこれに似た問題がいくつかありました。別のスレッドを作成し、バーコードがスキャンされるまでループするバーコード スキャナー ドライバーを使用していました。アプリケーションを終了しようとすると、スレッドが停止するまで待機し、バーコードがスキャンされるまでアプリケーションがフリーズします。タスク マネージャーもアプリケーションを終了できませんでした。

フォアグラウンド スレッド (Thread.IsBackground = false) がある場合、これにより、プロセスが終了するまでプロセスが終了しないようになると思います - http://msdn.microsoft.com/en-us/library/system.threading.thread.isbackground .aspx

したがって、問題は、起動したセカンダリ スレッドにある可能性があります。ロックなどを介してスレッドを待機しており、そのスレッドが無限ループにある場合、これが問題の原因である可能性があります。偶発的な無限ループの最も一般的な原因は、バッキング変数の代わりにプロパティを参照するプロパティ ゲッターを持っていることです。

これが何らかの助けになることを願っています。

于 2012-09-14T06:05:36.107 に答える
0

ハード フォールト (メモリ アクセス違反のような OS レベルのエラー) が発生した場合、ワトソン博士のログが作成されている間にシステムがフリーズするのを見てきました。

ES400 では、エラー報告機能を構成するためのコントロール パネル アプレットがあるかどうかは覚えていませんが、そこで確認してください。

そのようなログを作成していた場合、デフォルトでは \windows の下のサブフォルダーにあると思います。ただし、レジストリを介して構成可能な場合は、プロセス全体を確認することをお勧めします。

一般的なトピックについては、こちらを参照してください。

http://msdn.microsoft.com/en-us/library/ee481217(v=winembedded.60).aspx

そして、ここでは特にレジストリ設定について:

http://msdn.microsoft.com/en-us/library/ee480226(v=winembedded.60).aspx

于 2012-09-17T12:48:03.363 に答える