|
分類:[C#]
ちょっと分からないので、ご教授願います。
OS:XP 言語:C# 2005
AというフォームでBというフォームをshow()メソッドを使用して複数表示させています。 表示したい画面数分ループさせて、 そのループ処理の中で、Bというフォームをインスタンスさせて表示という感じです。
Bというフォームの中では、 ロードのイベントで描画処理を行っています。
描画処理は、メタファイルを作成してそれを保存。 それからその保存したファイルをピクチャで表示させる処理です。
下記にその描画処理のソースを載せます。
if (this.picHistGraph.BackgroundImage != null) { // すべてのリソースを解放 // this.picHistGraph.BackgroundImage.Dispose(); this.picHistGraph.BackgroundImage = null; }
// Metafileのインスタンス生成 // Graphics clsG = CreateGraphics(); IntPtr typIP = clsG.GetHdc(); Rectangle typR = new Rectangle(0, 0, this.picHistGraph.Width, this.picHistGraph.Height); Metafile clsM = new Metafile(new MemoryStream(), typIP, typR, MetafileFrameUnit.Pixel); clsG.ReleaseHdc(typIP); clsG.Dispose(); clsG = Graphics.FromImage(clsM);
// ここで図を描画する処理 //
// リソースを解放 clsG.Dispose(); // イメージファイルのパスを作成 string strImgFPath = this.MakeImgFPath(); // イメージファイルを保存 clsM.Save(strImgFPath); // イメージファイルを表示 this.picHistGraph.BackgroundImage = Image.FromFile(strImgFPath); // リソースを解放 clsM.Dispose();
ソースのイメージファイルを保存させる処理の部分で、 「GDI+ で汎用エラーが発生しました。」とのエラーが表示されて落ちます。 ちなみに、デバックでブレークポイントを使用してフォームとフォームの間の処理の間隔をあけるとエラーにはなりません。 Aのフォームのループ処理でsleepを10秒ぐらいしてあげても上手くいきました。 なので、同時にイメージファイルの保存が行われているのが原因かなと思っています。 ただ、イメージファイルはファイル名に時間をつける事により同じファイル名にはならないようにしています。
Sleepさせる以外にエラーにならないようにする手はないでしょうか? 宜しくお願い致します。
|