2015年12月4日金曜日

バグ修正

今日の目標→

今日はバグの修正だけ。

●修正箇所

前回のForm1.csで、ReadNetImage()メソッドの次の部分に問題があった。

return Image.FromStream(stream);

これは次の3行のコードに差し替える。

MemoryStream mem = new MemoryStream();
stream.CopyTo(mem);
return Image.FromStream(mem);

そもそもWebClient.OpenRead()の説明で、「ストリームはすぐ閉じろ」的なことが書いてあるから、即クローズしていたのである。しかも、確実にストリームをクローズできるように、わざわざtry~catch~finally構文とか使ってた。

ところが、Image.FromStream()の説明を見たら、「読み込んだ画像の使用中はストリームを閉じちゃダメ」だって。なんだよそれ。

結局、ネットデータのストリームはメモリにコピーして接続を切る。そしてメモリストリームはクローズせず後始末をガベコレにまかせる、という折衷案にたどり着いたのであった。

バグ修正後のForm1.csが下記である。

旧版のプログラムはアニメーションGIFを読み込ませると不正終了した。今度は大丈夫だろう…たぶん…。

0 件のコメント:

コメントを投稿