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();
                }
            }
Beispiel #2
0
            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();
                }
            }