4

私は多くのマシンで問題なく動作するソフトウェアを持っていますが、あるマシンでは時折発生するように見える問題があります.MenuStripとToolStripの両方がカスタムコントロールとして赤い十字が付いた空白の白い背景として表示されます. null オブジェクトを作成したとします。これは、デバッグ中には発生せず、問題を再発させる方法はわかりませんが、発生します。何が問題なのか誰かが知っているかどうか疑問に思っていましたか?

.NET Framework のバージョンでしょうか。

ありがとう

4

5 に答える 5

3

これは、GDI+ の問題 (「The Red X of Death」) がある場合によく発生します。でカスタム描画を行っていますOnPaintか? または、グラフィック リソースまたはグリフが破損しているか、不適切に破棄されている可能性があります。

編集:あなたの質問を読み直しました。これは、マシンの1つだけにあるようです。これについて少しグーグルで調べたところ、この古いスレッドに出くわしました。下部の投稿は、仮想メモリがオフになっていると問題が発生する可能性があることを示唆しています。

これを解決することができました - XP が組み込まれたデバイスで問題が発生していました。XPe イメージの開発者は仮想メモリをオフにしていたので、オンにするとすぐに問題はなくなりました。グラフィックを表示するためのメモリが不足しているシステムの単なる症状だと思います(特に、多くのダブルバッファリングを使用している場合)

それが役立つことを願っています。

于 2009-06-16T08:07:41.490 に答える
2

私にはメモリ不足例外の症状のように聞こえます。

編集: これは時々につながる可能性がありますSystem.InvalidOperationException: BufferedGraphicsContext

于 2009-06-16T07:45:58.607 に答える
1

間違いなくクロススレッドの問題のように聞こえます。

コントロールにアクセスしたり、メイン UI スレッドではないスレッドからイベントを発生させたりする場合は、必ず Invoke を使用してください。

于 2009-06-16T08:08:14.263 に答える
1

これは、1000 台を超えるコンピューターのうち、1 台のコンピューターでのみ発生します。その 1 台のコンピューターで、.NET 3.5 プログラムのデータグリッドに赤い X が表示されることがあります。また、はるかに単純な別の .NET 2.0 プログラムでは、メニュー ストリップに赤い X が付いています。単純なプログラムのソース コードしかありませんが、そのコンポーネントに影響を与えるユーザー コードはまったくないと言えます。何も更新しないため、クロススレッドのものはありません。その内容は開発時に設定され、プログラムのロード時に 1 つの項目が追加されます。赤い X の失敗は、プログラムのロードのかなり後でした。

2 つの異なるフレームワークと、データ バインディングを持たない 1 つのプログラムで問題が発生したことに非常に驚きました。コンピューターの仮想メモリがオフになっていることを願っています。

そうでない場合は、.NET 2.0 と .NET 3.5 で共有されるシステム部分に関するガイダンスをいただければ幸いです。

更新: 問題を抱えたユーザーがコンピューターを引退させ、交換しました (これにより、問題は解決しました)。

于 2014-03-04T19:32:41.337 に答える
1

GUI スレッド以外のスレッドから GUI コントロールを更新しようとしていますか? クロススレッド操作をすべてを飲み込んだ例外ハンドラーと組み合わせると、私が維持していたアプリで(メニューストリップバーではなくグリッドコントロールで)あなたが説明した動作が得られました。

于 2009-06-16T07:59:15.403 に答える