私は必死に近づいています.. C# とかなりの p/Invoking を使用して、Windows Mobile 6.1 用のフィールド サービス アプリケーションを開発しています。(50個くらいのネイティブ関数を参照していると思います)
通常の状況では、これは問題なく行われますが、GC に負荷をかけ始めると、厄介な 0xC0000005 エラーが発生します。魔女は捕まえられないようです。私のテストでは、ダイアログ フォームをすばやく閉じたり開いたりしています (フォームはネイティブ関数を使用していましたが、テストのためにこれらをコメント アウトしました)。私のアプリケーションのエラー。
私のコードは try-catch を使用Application.Run(masterForm);
してイベントにフックしCurrentDomain.UnhandledException
ますが、アプリケーションは依然としてクラッシュします。デバッガーをアタッチしても、例外が発生すると、ビジュアルスタジオは「デバイスへのリモート接続が失われました」と言うだけです..
管理された環境で例外をキャッチできなかったため、Error Reporter のログ ファイルを調べてみました。しかし、これは意味がありません。エラーについて唯一一貫しているのは、エラーが発生したアプリケーションです。
アプリケーションが発生するスレッドは不明です。エラーが発生するモジュールは時々異なります (application.exe、WS2.dll、netcfagl3_5.dll、および mscoree3_5.dll を見たことがあります)。エラー コードもわかりません。常に同じではありません。(ほとんどの場合は 0xC0000005 ですが、0X80000002 エラーも見たことがあります。これは最初のバイトを説明する警告ですか?)
バグトラップを使用してデバッグを試みましたが、奇妙なことに、これは同じエラー コード (0xC0000005) でクラッシュします。Visual Studioでkdmpファイルを開こうとしましたが、エラーが発生したときに逆アセンブラーコードしか表示されないため、これを理解できないようです(適切な.pbbファイルがない限り、. 't)。WinDbg についても同様です。
長い話を簡単に言うと、率直に言って、このエラーをどこで探すべきかについての手がかりが1つもありません。いくつかのコードを提供できてうれしいですが、現時点ではどの部分を提供すればよいかわかりません..
どんな助けでも大歓迎です!
[2010 年 5 月 3 日編集]
Hans へのコメントでわかるように、すべての P/Invokes のコメントを外した後、プログラム全体を再テストしましたが、問題は解決しませんでした。できるだけ少ないコードでエラーを再現しようとしましたが、最終的にマルチスレッド アクセスがすべての問題を引き起こしているようです。
私のアプリケーションには、指/フリックスクロールリストとして機能するユーザーコントロールがあります。このコントロールでは、リスト内の各項目のビットマップをキャンバスとして使用します。このキャンバスでの描画は別のスレッドで処理され、このスレッドを無効にすると、エラーが消えたように見えます..これについてさらにテストを行い、結果をここに投稿します.