Bitmap( Stream stream )コンストラクタ

昨日書いた問題に続けてまた落とし穴に落ちました。
ImageList に bitmap を追加するのに、こんなコードを書きました。

1: System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
2: using ( Stream stream1 = asm.GetManifestResourceStream( "Hoge.resources.cat.bmp" ) )
3: using ( Stream stream2 = asm.GetManifestResourceStream( "Hoge.resources.dog.bmp" ) )
4: {
5:   imageList1.Images.Add( new Bitmap( stream1 ) );
6:   imageList1.Images.Add( new Bitmap( stream2 ) );
7: }

これを実行すると、

'System.Runtime.InteropServices.ExternalException' のハンドルされていない例外が system.windows.forms.dll で発生しました。
追加情報 : GDI+ で一般的なエラーが発生しました。

と言われる。一般的なエラーなんて曖昧なことを言われても困ってしまう。
デバッガで、5行目で止めて imageList1 を見ながらステップ実行してみると、今度は例外が発生せずビットマップも表示できてしまった。あ〜、こういうの嫌だ。
次に5行目のブレークを外して、7行目でブレークすると、今度は imageList1 に Images が追加されてない。stream を開放しているのが悪そうなので、Bitmapのヘルプを読んでみました。
すると、解説に「Bitmap オブジェクトの有効期間の間は、このストリームを開いておく必要があります。」とのこと。ありゃ。そうだったのか。
Stream を開放しないように修正するとすんなり動きました。

System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
imageList1.Images.Add( new Bitmap( asm.GetManifestResourceStream( "Hoge.resources.cat.bmp" ) ) );
imageList1.Images.Add( new Bitmap( asm.GetManifestResourceStream( "Hoge.resources.dog.bmp" ) ) );

道のりは遠く険しい…。4/1ですが、いつも通り。

(4/2 追記)問題は実は別のところでした。詳しくは http://d.hatena.ne.jp/siokoshou/20050402/1112409533