C# Class System.IO.NetFxToWinRtStreamAdapter

An wrapper for a managed stream that implements all WinRT stream operations. This class must not implement any WinRT stream interfaces directly. We never create instances of this class directly; instead we use classes defined in the region Interface adapters to implement WinRT ifaces and create instances of those types. See comment in that region for technical details.
Inheritance: IDisposable
显示文件 Open project: dotnet/corefx Class Usage Examples

Public Methods

Method Description
CloneStream ( ) : IRandomAccessStream
FlushAsync ( ) : IAsyncOperation
GetInputStreamAt ( UInt64 position ) : IInputStream
GetManagedStream ( ) : Stream
GetOutputStreamAt ( UInt64 position ) : IOutputStream
ReadAsync ( Windows.Storage.Streams.IBuffer buffer, UInt32 count, InputStreamOptions options ) : UInt32>.IAsyncOperationWithProgress
Seek ( UInt64 position ) : void
WriteAsync ( Windows.Storage.Streams.IBuffer buffer ) : UInt32>.IAsyncOperationWithProgress

Private Methods

Method Description
CanApplyReadMemoryStreamOptimization ( Stream stream ) : bool
Create ( Stream stream ) : NetFxToWinRtStreamAdapter
DetermineStreamReadOptimization ( Stream stream ) : StreamReadOperationOptimization
EnsureNotDisposed ( ) : Stream
IDisposable ( ) : void

Implements IDisposable.Dispose (IClosable.Close in WinRT)

NetFxToWinRtStreamAdapter ( Stream stream, StreamReadOperationOptimization readOptimization ) : System.Diagnostics
SetWonInitializationRace ( ) : void

We keep tables for mappings between managed and WinRT streams to make sure to always return the same adapter for a given underlying stream. However, in order to avoid global locks on those tables, several instances of this type may be created and then can race to be entered into the appropriate map table. All except for the winning instances will be thrown away. However, we must ensure that when the losers are finalized, they do not dispose the underlying stream. To ensure that, we must call this method on the winner to notify it that it is safe to dispose the underlying stream.

ThrowCloningNotSupported ( String methodName ) : void

Method Details

CloneStream() public method

public CloneStream ( ) : IRandomAccessStream
return IRandomAccessStream

FlushAsync() public method

public FlushAsync ( ) : IAsyncOperation
return IAsyncOperation

GetInputStreamAt() public method

public GetInputStreamAt ( UInt64 position ) : IInputStream
position UInt64
return IInputStream

GetManagedStream() public method

public GetManagedStream ( ) : Stream
return Stream

GetOutputStreamAt() public method

public GetOutputStreamAt ( UInt64 position ) : IOutputStream
position UInt64
return IOutputStream

ReadAsync() public method

public ReadAsync ( Windows.Storage.Streams.IBuffer buffer, UInt32 count, InputStreamOptions options ) : UInt32>.IAsyncOperationWithProgress
buffer Windows.Storage.Streams.IBuffer
count UInt32
options InputStreamOptions
return UInt32>.IAsyncOperationWithProgress

Seek() public method

public Seek ( UInt64 position ) : void
position UInt64
return void

WriteAsync() public method

public WriteAsync ( Windows.Storage.Streams.IBuffer buffer ) : UInt32>.IAsyncOperationWithProgress
buffer Windows.Storage.Streams.IBuffer
return UInt32>.IAsyncOperationWithProgress