0

フォルダー ブラウザー ダイアログと printdialog を使用する Visual Studio 2008 で C# アプリケーションを開発しています。ShowDialog()最近、これら 2 つのダイアログ ボックスのメソッドが呼び出されるたびに、プログラムでエラーが発生します。

エラーは言う:

保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。

奇妙なことに、このエラーはこのプロジェクトにのみ固有のものです。新しい C# プロジェクトでフォルダー ブラウザー ダイアログを使用すると、問題なく動作します。さらに、このエラーは、言及されたプロジェクトで最近発生し始めました。以前は、完全に正常に機能していました。また、デバッグ モードで IDE からプログラムを実行すると、このエラーは発生しません。

スタック オーバーフローに関する他の質問には、デバッグ オプションで「モジュールのロード時に JIT 最適化を抑制する」のチェックを外す提案があります。私もそれを試しましたが、それは私の問題を解決しませんでした。

誰かがこの問題を解決するのを手伝ってくれますか?

4

1 に答える 1

0

コードを見ずに何を言うのは難しいです。作成されたスレッド以外のスレッドで UI にアクセスすると、この問題が発生するのを見てきました。それを避けるために、何らかのスレッドからの UI コントロールをいじっている場合は、次のような関数を作成できます。

public static void ExecuteAction(Control myControl, Action myAction) 
{
    if (myControl.InvokeRequired) { myControl.Invoke(myAction); }
    else { myAction(); }
}

次に、コントロールと実行したいアクション (たとえば、その色などを変更する) を使用して、必要なスレッドからそれを呼び出すだけです。

長い間ダイアログで何もしていないので、特にダイアログの問題を見たことはありませんが、これは UI の問題であり、以前に見たのと同じエラー メッセージであるため、試してみます。 .
Control.CheckForIllegalCrossThreadCalls の値を確認することもできます。http://msdn.microsoft.com/en-us/library/system.windows.forms.control.checkforillegalcrossthreadcalls.aspx

于 2012-05-23T23:01:39.190 に答える