public static void Save(FormatData data, SongData song) { if (!FormatData.LocalSongCache || (data.PlatformData != null && data.PlatformData.Platform == PlatformLocalStorage.Instance)) { CacheMutex.WaitOne(); try { Stream stream = data.AddStream("songdata"); song.Save(stream); data.CloseStream(stream); } catch (Exception ex) { CacheMutex.ReleaseMutex(); throw ex; } CacheMutex.ReleaseMutex(); } SongData songdata = null; if (Cache.ContainsKey(data)) { songdata = Cache[data]; } if (FormatData.LocalSongCache && songdata != song) { songdata = song; songdata.PropertyChanged += new Action <SongData>(data.Song_PropertyChanged); Cache[data] = songdata; } }