- PR -

VB.,NETアプリが System.InvalidOperationException がでて落ちる。画面描画でクラッシュ?

1
投稿者投稿内容
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2006-02-07 17:12
こんにちは。お世話になってます。

現在、VB.NET 2005 + SQL Server 2005 でWinFormアプリケーションを作っています。

MDIフォーム形式の中に、子フォームが開き、その子フォームには多くのコントロール
が貼り付けてあります。
VB6ころに作っていたときの画面と同程度の物でVB6時はそんな違和感無く使用できて
いたものですが、VB.NETになって画面描画がぱらつく状態となってしまいました。

若干ぱらつくのは我慢していたのですが、突然、ある端末においては以下のような
例外が発生してアプリが落ちてしまう現象が出ました。

アプリの大元でハンドルできない例外をキャッチしてログに出力しています。

コード:
System.InvalidOperationException: バッファ操作が現在進行中であるため、BufferedGraphicsContext を消去できません。
   場所 System.Drawing.BufferedGraphicsContext.Dispose(Boolean disposing)
   場所 System.Drawing.BufferedGraphicsContext.Dispose()
   場所 System.Drawing.BufferedGraphicsContext.AllocBufferInTempManager(Graphics targetGraphics, IntPtr targetDC, Rectangle targetRectangle)
   場所 System.Drawing.BufferedGraphicsContext.AllocBuffer(Graphics targetGraphics, IntPtr targetDC, Rectangle targetRectangle)
   場所 System.Drawing.BufferedGraphicsContext.Allocate(IntPtr targetDC, Rectangle targetRectangle)
   場所 System.Windows.Forms.Control.WmPaint(Message& m)
   場所 System.Windows.Forms.Control.WndProc(Message& m)
   場所 System.Windows.Forms.ButtonBase.WndProc(Message& m)
   場所 System.Windows.Forms.Button.WndProc(Message& m)
   場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)



いろいろと調べたのですが、これといった情報が見当たりません。
何か、ご存知の方はおられませんでしょうか?

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-07 17:24
引用:

maruさんの書き込み (2006-02-07 17:12) より:

アプリの大元でハンドルできない例外をキャッチしてログに出力しています。


それは良いのですが、実際にはどのタイミングで起きるのでしょうか?
このスタック トレースですと、見当が付かなかったもので。

もし、MDI 子フォームの Load 時であれば、周辺のコードもください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2006-02-07 17:48
早速の返答ありがとうございます。

MDIフォームに子フォームをいくらか開いて、子フォームや親フォームのウィンドウ
サイズを変えたり、子フォームを別のフォームにアクティブにしたり、タブコントロ
ールを切り替えたりしているとパラパラと画面描画されます。

それを高速に繰り返すと、突然アプリが落ちてログに例外が記録されています。

ちなみにタスクマネージャを見ながらしてみたのですが、メモリ不足ではなさそう
です。1GB の実メモリに対し、空き320MB近くある状態でもおちるようです。



[ メッセージ編集済み 編集者: maru 編集日時 2006-02-07 18:09 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-07 17:56
結局のところ、まずい処理が介入しているかどうかが不明なため、ミニマム コードが必要になります。
そして、その最低限のコードをこちらに記載して欲しいです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-02-08 00:02
引用:

それを高速に繰り返すと、突然アプリが落ちてログに例外が記録されています。


基本的に起こってはいけないことが起こっているのではないでしょうか。
つまり何か原因があるはずで、だからじゃんぬさんもコードがわかればとおっしゃっておられます。

デバッグで動かしてどのステップで落ちているのか。
多数のコントロールとはどの程度なのか。特殊なコントロールや使い方をしていないか。
再現性はあるのか。(特定フォーム、特定PC、特定の操作)
など、明らかに情報が不足しています。
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2006-02-08 02:15
南部です。

ここで同じのがありますね。
解決してませんが、一応。

DoubleBufferをfalseにするしかないのかなぁ。
#かなりチラつくのかな?
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2006-02-08 15:27
こんにちは。お世話になってます。返答ありがとうございます。

落ちるプログラム自身は画面上にコントロールを大量に貼り付けているだけのフォー
ムで、そのコントロールのイベントの中にはほとんど処理は書いていません。

タイミングは不定期で、フォームリサイズなどを高速に連続してやり続けると発生し
ますので、ステップ実行で再現できるものではありません。

標準コントロールを継承した自作コントロールを多数貼り付けており、なかに画面描画
系(OnPaint)イベントをオーバーライドして自分でイメージをDrawしたりしているもの
もあるため、それが怪しいのかなと思いました。

まだ、これがミニマムコードというのは示せないので、その怪しいと思われている部分
をコメントするなりして、挙動の違いを確認しながら、怪しい部分を絞っていきたい
と思います。
1

スキルアップ/キャリアアップ(JOB@IT)