询问者
在Task.Run去给外部的对象赋值,出去之后内容离奇没有了

问题
-
如下代码
static public IRandomAccessStream GetIStreamFormBuf(byte[] buf) { IRandomAccessStream stream = null; //todo 目前这个接口在主线程调用会卡死 Task.Run(() => { var t = GetIStreamFormBufAsync(buf); t.Wait(); stream = t.Result; }).Wait(); return stream; } static public async Task<IRandomAccessStream> GetIStreamFormBufAsync(byte[] buf) { if (buf != null) { InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream(); using (DataWriter dataWriter = new DataWriter(ras.GetOutputStreamAt(0))) { dataWriter.WriteBytes(buf); await dataWriter.StoreAsync().AsTask().ConfigureAwait(false); await dataWriter.FlushAsync().AsTask().ConfigureAwait(false); return ras; } } return null; }
在第一个函数黎孟德t.Result的数据是有的,但是出去Task线程后,stream就Size变成了0,这是为什么呢?
全部回复
-
我这里测试了你的代码,在一个MainPage的 OnNavigatedTo 方法里面,应该是主线程哦。 可以拿到IRandomAccessStream,虽然VS Debugger无法显示Size(跨线程这里Watcher还是无法抓到size),但是还是可以Read出数据的,没有问题,int b = s.AsStreamForRead().ReadByte();
Bob Bao [MSFT]
MSDN Community Support | Feedback to us