如何在C#中实现IRandomAccessStream?

前端之家收集整理的这篇文章主要介绍了如何在C#中实现IRandomAccessStream?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在C#中实现一个IRandomAccessStream实例(它将返回实时生成的数据).该流实际上不需要是可写的或可搜索的,但我想在ReadAsync方法中返回我自己的数据(它实际上是IInputStream的一部分).
public IAsyncOperationWithProgress<IBuffer,uint> ReadAsync(IBuffer buffer,uint count,InputStreamOptions options)
{
    throw new NotImplementedException("To be done");
}

我的两个主要问题是:

>如何返回实现IAsyncOperationWithProgress的内容?框架中是否有任何内容可以帮助解决这个问题?
>如何将数据写入缓冲区? IBuffer只有Length和Capacity属性(具体的Buffer类也不再提供).

解决方法

How to Convert byte Array to IRandomAccessStream

我发现这篇博客文章,希望这个IRandomAccessStream的实现可以成为你的起点.

class MemoryRandomAccessStream : IRandomAccessStream
{
    private Stream m_InternalStream;

    public MemoryRandomAccessStream(Stream stream)
    {
        this.m_InternalStream = stream;
    }

    public MemoryRandomAccessStream(byte[] bytes)
    {
        this.m_InternalStream = new MemoryStream(bytes);
    }

    public IInputStream GetInputStreamAt(ulong position)
    {
        this.m_InternalStream.Seek((long)position,SeekOrigin.Begin);

        return this.m_InternalStream.AsInputStream();
    }

    public IoUtputStream GetOutputStreamAt(ulong position)
    {
        this.m_InternalStream.Seek((long)position,SeekOrigin.Begin);

        return this.m_InternalStream.AsOutputStream();
    }

    public ulong Size
    {
        get { return (ulong)this.m_InternalStream.Length; }
        set { this.m_InternalStream.SetLength((long)value); }
    }

    public bool CanRead
    {
        get { return true; }
    }

    public bool CanWrite
    {
        get { return true; }
    }

    public IRandomAccessStream CloneStream()
    {
        throw new NotSupportedException();
    }

    public ulong Position
    {
        get { return (ulong)this.m_InternalStream.Position; }
    }

    public void Seek(ulong position)
    {
        this.m_InternalStream.Seek((long)position,0);
    }

    public void Dispose()
    {
        this.m_InternalStream.Dispose();
    }

    public Windows.Foundation.IAsyncOperationWithProgress<IBuffer,InputStreamOptions options)
    {
        var inputStream = this.GetInputStreamAt(0);
        return inputStream.ReadAsync(buffer,count,options);
    }

    public Windows.Foundation.IAsyncOperation<bool> FlushAsync()
    {
        var outputStream = this.GetOutputStreamAt(0);
        return outputStream.FlushAsync();
    }

    public Windows.Foundation.IAsyncOperationWithProgress<uint,uint> WriteAsync(IBuffer buffer)
    {
        var outputStream = this.GetOutputStreamAt(0);
        return outputStream.WriteAsync(buffer);
     }
}
原文链接:https://www.f2er.com/csharp/99393.html

猜你在找的C#相关文章