当前位置: 首页 > 编程语言 > C#

如何在C#中实现IRandomAccessStream?分享

时间:2023-04-11 11:40:51 C#

C#中如何实现IRandomAccessStream?我想在C#中实现IRandomAccessStream的一个实例(它将返回实时生成的数据)。流实际上不需要可写或可搜索,但我想在ReadAsync方法(实际上是IInputStream的一部分)中返回我自己的数据。publicIAsyncOperationWithProgressReadAsync(IBufferbuffer,uintcount,InputStreamOptionsoptions){thrownewNotImplementedException("待完成");我的两个主要问题是:如何返回IAsyncOperationWithProgress的实现?框架中有什么可以帮助解决这个问题吗?如何将数据写入缓冲区?IBuffer只有Length和Capacity属性(不再提供具体的Buffer类)。如何将字节数组转换为IRandomAccessStream我找到了这篇博文,希望这个IRandomAccessStream实现可以成为您的起点。类MemoryRandomAccessStream:IRandomAccessStream{privateStreamm_InternalStream;publicMemoryRandomAccessStream(Streamstream){this.m_InternalStream=stream;}publicMemoryRandomAccessStream(byte[]bytes){this.m_InternalStream=newMemoryStream(bytes);}publicIInputStreamGetInputStreamAt(ulongposition){this.m_InternalStream.Seek((long)position,SeekOrigin.Begin);返回this.m_InternalStream.AsInputStream();}publicIOutputStreamGetOutputStreamAt(ulongposition){this.m_InternalStream.Seek((long)position,SeekOrigin.Begin);返回this.m_InternalStream.AsOutputStream();}publiculongSize{get{return(ulong)this.m_InternalStream.Length;}set{this.m_InternalStream.SetLength((long)value);}}publicboolCanRead{get{returntrue;}}publicboolCanWrite{get{returntrue;}}publicIRandomAccessStreamCloneStream(){thrownewNotSupportedException();}publiculongPosition{get{return(ulong)this.m_InternalStream.位置;}}publicvoidSeek(ulongposition){this.m_InternalStream.Seek((long)position,0);}publicvoidDispose(){this.m_InternalStream.Dispose();}publicWindows.Foundation.IAsyncOperationWithProgressReadAsync(IBufferbuffer,uintcount,InputStreamOptionsoptions){varinputStream=this.GetInputStreamAt(0);返回inputStream.ReadAsync(缓冲区,计数,选项);}publicWindows.Foundation.IAsyncOperationFlushAsync(){varoutputStream=this.GetOutputStreamAt(0);返回outputStream.FlushAsync();}publicWindows.Foundation.IAsyncOperationWithProgressWriteAsync(IBufferbuffer){varoutputStream=this.GetOutputStreamAt(0);返回outputStream.WriteAsync(缓冲区);使用AsyncInfo.Run(Func,Task>)方法从委托创建IAsyncOperationWithProgress实例publicIAsyncOperationWithProgressReadAsync(IBufferbuffer,uintcount,InputStreamOptionsoptions){if(buffer==null)thrownewArgumentNullException("buffer");}Func,Task>taskProvider=(token,progress)=>ReadBytesAsync(buffer,count,to,progress,options);返回AsyncInfo.Run(taskProvider);}privateasyncTaskReadBytesAsync(IBufferbuffer,uintcount,CancellationTokentoken,IProgressprogress,InputStreamOptionsoptions){...在此处填充缓冲区。汇报进展。返回缓冲区;通常您不需要直接访问缓冲区数据。但如果您需要在c#中执行此操作,则可以使用System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions类将数据复制到缓冲区或从缓冲区复制数据。以上就是C#学习教程:如何在C#中实现IRandomAccessStream?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢