读书人

WP8/Win8异步读写资料

发布时间: 2013-09-10 13:42:18 作者: rapoo

WP8/Win8异步读写文件
本帖最后由 hnsdwhl 于 2013-02-21 09:17:23 编辑 在WP8/Win8提供的API里面,对于文件的读写都是采用异步的方式。现在我需要等待文件读写完成,并将读取的文件内容保存到变量中,以供后面使用。但是还未等我将内容保存到变量中,程序就往下面执行了,这时变量还没有值,请问应该要怎样做,让变量赋值完成再往下走。相关的代码如下。


public static class Test
{
private static ushort[] testArray = new ushort[0xffff];

static Test()
{
LoadFile();
//下面需要使用testArray变量,但是此时变量还没有值
}

public async static void LoadFile()
{
StorageFolder packageFolder = Package.Current.InstalledLocation;
StorageFile packagedFile = await packageFolder.GetFileAsync(@"test.bin");
using (Stream stream = await packagedFile.OpenStreamForReadAsync())
{
using (BinaryReader reader = new BinaryReader(stream))
{
for (int i = 0; i < 0xffff; i++)
{
testArray[i] = reader.ReadUInt16();
}
}
}
}
}

[解决办法]
await就会等待呀.
你不是已经加了await了吗
[解决办法]
你调用LoadFile();的时候不await,当然不等你了.
------解决方案--------------------


那就别放在构造函数里执行。
比如 OnNavigatedTo
或者其他的事件函数里都没没有问题。
[解决办法]
楼主的想法是好的,但是做法有问题,首先你要搞清楚你的这个testArray 要在什么时候赋值,如果没看错应该是在, 这里读文件的时候赋值的testArray[i] = reader.ReadUInt16();,如果只这样比较好的做法是用事件委托的方式在读完文件之后把事件处理函数调起来继续处理。简单写一下就是在这
using (BinaryReader reader = new BinaryReader(stream))(4)
{
for (int i = 0; i < 0xffff; i++)
{
testArray[i] = reader.ReadUInt16();
if(readfinishEvent!=null)
{
readfinishEvent(testArray);//通过事件委托的方式来做。
}
}
然后再test函数中把这个事件注册一下就行了吧。

读书人网 >Windows Mobile

热点推荐