public void SwitchBuffer() { switchSync.WaitOne(); bufferSync.WaitOne(); try { var newBuffer = (currentBuffer + 1) % 2; var newFileStream = File.Create(Path.Combine(TemporaryFilesManager.Instance.EmulatorTemporaryPath, string.Format("{0}.{1}", BUFFER_FILE, newBuffer))); var newWriter = new WriterDescriptor { Writer = new PrimitiveWriter(newFileStream, false) }; var oldWriter = currentWriter; currentWriter = newWriter; if (oldWriter != null) { while (oldWriter.ReferenceCounter > 0) { Thread.Sleep(10); } oldWriter.Writer.Dispose(); currentFileStream.Dispose(); } currentBuffer = newBuffer; currentFileStream = newFileStream; } finally { bufferSync.Release(); switchSync.Release(); } }
public void SwitchBuffer() { switchSync.WaitOne(); bufferSync.WaitOne(); try { var newBuffer = (currentBuffer + 1) % 2; var newFileStream = File.Create(Path.Combine(TemporaryFilesManager.Instance.EmulatorTemporaryPath, string.Format("{0}.{1}", BUFFER_FILE, newBuffer))); var newWriter = new WriterDescriptor { Writer = new PrimitiveWriter(newFileStream, false) }; var oldWriter = currentWriter; currentWriter = newWriter; if(oldWriter != null) { while (oldWriter.ReferenceCounter > 0) { Thread.Sleep(10); } oldWriter.Writer.Dispose(); currentFileStream.Dispose(); } currentBuffer = newBuffer; currentFileStream = newFileStream; } finally { bufferSync.Release(); switchSync.Release(); } }