今日の目標→
今日はバグの修正だけ。
●修正箇所
前回の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 件のコメント:
コメントを投稿