I am trying to secure my isolated storage with mutex so I can access it from both mobile application and BackgroundAudioPlayer.
These are my helpers class to access files in isostorage:
public static async Task WriteToFile(string text) { using (var mut = new Mutex(false, "IsoStorageMutex")) { mut.WaitOne(); try { // Get the text data from the textbox. byte[] fileBytes = System.Text.Encoding.UTF8.GetBytes(text.ToCharArray()); // Get the local folder. var local = ApplicationData.Current.LocalFolder; // Create a new folder name DataFolder. var dataFolder = await local.CreateFolderAsync("MusicFolder", CreationCollisionOption.OpenIfExists); // Create a new file named DataFile.txt. var file = await dataFolder.CreateFileAsync("Streams.txt", CreationCollisionOption.ReplaceExisting); // Write the data from the textbox. using (var s = await file.OpenStreamForWriteAsync()) { s.Write(fileBytes, 0, fileBytes.Length); } } finally { mut.ReleaseMutex(); } } } public static async Task<string> ReadFile() { using (var mut = new Mutex(false, "IsoStorageMutex")) { mut.WaitOne(); var result = String.Empty; try { // Get the local folder. var local = ApplicationData.Current.LocalFolder; if (local != null) { // Get the DataFolder folder. var dataFolder = await local.GetFolderAsync("MusicFolder"); // Get the file. var file = await dataFolder.OpenStreamForReadAsync("Streams.txt"); // Read the data. using (var streamReader = new StreamReader(file)) { result = streamReader.ReadToEnd(); } } } finally { mut.ReleaseMutex(); } return result; } } But when I try to access it in Background Agent I get this error:
Object synchronization method was called from an unsynchronized block of code. StackTrace:
at System.Threading.Mutex.ReleaseMutex() at YouRadio.IsolatedStorage.StorageHelpers.<ReadFile>d__b.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at YouRadio.AudioPlaybackAgent.AudioPlayer.<AddTracksFromIsoStorageToPlaylist>d__6.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.GetResult() at YouRadio.AudioPlaybackAgent.AudioPlayer.<OnUserAction>d__2.MoveNext() What I am doing wrong?