|
分類:[C#]
visual studio2010 C#にて開発しています。
pictureboxの画像を更新する際に、dispose()を行わなかったために、処理が重くなる現象が起きました。 このため、画像の更新時にdispose()を行うようにしたのですが、例外が発生するようになりました。
2つの画像を順次張り替えるテストプログラムです。
<ソース> Image[] img = new Image[2]; private void button1_Click(object sender, EventArgs e) { img[0] = Image.FromFile(@"1.png"); img[1] = Image.FromFile(@"2.png"); for (int i = 0; i < 10000; i++) { setobbg(ref pictureBox1, img[0]); pictureBox1.Update(); setobbg(ref pictureBox1, img[1]); pictureBox1.Update(); } } private void setobbg(ref PictureBox ctl, Image img) { var oldImg = ctl.BackgroundImage; ctl.BackgroundImage = img; if (oldImg != null) { oldImg.Dispose(); } }
<例外> 'System.ArgumentException' のハンドルされていない例外が System.Drawing.dll で発生しました。 追加情報: 使用されたパラメータが有効ではありません。
<発生について> 分かっていることを箇条書きにします。 ・ステップ実行した際には、例外は起きません。 ・例外で停止する場所は、一定ではありません。 ・大抵はiが1の時、つまり2周目で発生します。
何か情報をお持ちでしょうか。 よろしくお願いします。
|