• R/O
  • HTTP
  • SSH
  • HTTPS

CsWin10Desktop3: Commit

Visual C# 7.0, Windows10 Desktop App


Commit MetaInfo

Revision4999fee6fef87048de8b190c62e1226a421a50dd (tree)
Time2017-10-15 00:55:50
Authorくまかみ工房 <kumakamikoubou@gmai...>
Commiterくまかみ工房

Log Message

Mixer の Dispose 時に例外が発生していたミスを修正。

Sound.Dispose() は Stop() を呼び出し、自分で自分を Mixer から削除するので foreach で回してはいけない。
WaveFormat を参照渡ししていたか所を値渡しに修正。

Change Summary

Incremental Difference

--- a/FDK/メディア/サウンド/WASAPI/Mixer.cs
+++ b/FDK/メディア/サウンド/WASAPI/Mixer.cs
@@ -62,7 +62,7 @@ namespace FDK.メディア.サウンド.WASAPI
6262 public Mixer( WaveFormat deviceWaveFormat )
6363 {
6464 // ミキサーのフォーマットは、デバイスのフォーマットをそのまま使う。
65- this._WaveFormat = deviceWaveFormat;
65+ this._WaveFormat = deviceWaveFormat.Clone() as WaveFormat;
6666 }
6767
6868 /// <summary>
@@ -72,10 +72,13 @@ namespace FDK.メディア.サウンド.WASAPI
7272 {
7373 lock( this._スレッド間同期 )
7474 {
75- foreach( var sound in this._Sounds )
75+ //foreach( var sound in this._Sounds )
76+ // sound.Dispose(); --> Dispose()する = Stop()する = this._SoundsからRemoveするということなので、foreachは使えない。
77+ var sound = (Sound) null;
78+ while( null != ( sound = this._Sounds.Last?.Value ) )
7679 sound.Dispose();
7780
78- this._Sounds.Clear();
81+ this._Sounds.Clear(); // すでに空のはずだが念のため。
7982 }
8083 }
8184
@@ -192,10 +195,8 @@ namespace FDK.メディア.サウンド.WASAPI
192195
193196 // 再生が終了したSoundをサウンドリストから削除する。
194197 foreach( var sound in 再生終了したSound一覧 )
195- {
196- sound.Stop(); // Stopしないままリストから除去したらメモリリークするので注意!
197- this.RemoveSound( sound ); // Sound は(また再利用できるように)Dispose() しないので、Sound の生成元で管理すること。
198- }
198+ sound.Stop(); // この中で自分でRemoveする
199+
199200 再生終了したSound一覧.Clear();
200201 }
201202 }
Show on old repository browser