【发布时间】:2014-02-14 05:19:26
【问题描述】:
我正在使用异步调用将文件写入到 IsolatedStorageFile
async void Base64ToImage()
{
byte[] data;
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream isfs = isf.OpenFile("image.p64", FileMode.Open, FileAccess.ReadWrite))
{
data = new byte[isfs.Length];
isfs.Read(data, 0, data.Length);
isfs.Close();
}
using (IsolatedStorageFileStream stream = isf.OpenFile("newReConvertedFile.png", FileMode.Create))
{
await stream.WriteAsync(data, 0, data.Length);
///////////////////The problem is here, how would i know when WriteAsync is complete to then fire the reload method?
//reLoadFile();
}
}
}
我需要知道 WriteAsync 何时完成才能以另一种方法重新加载该文件,我该怎么做?
编辑:
实际上我的第一个想法是将文件保存到 isostorage,然后将图像 uri 发送到该文件,但是您不能将 uri 设置为图像的 isostorage,或者至少我无法显示
我最初的想法是等待方法调用以重新加载文件,但我得到一个错误“???不返回任务,不能等待。考虑将其更改为返回”,但我不知道该怎么做。
这里的想法是将几个图像转换为 Base64 (SQLite db),然后只加载选定的图像以显示。
reLoadFile方法如下
async void reLoadFile()
{
byte[] newFile;
using (IsolatedStorageFile newFileLoc = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream newFileStream = newFileLoc.OpenFile("newReConvertedFile.png", FileMode.Open, FileAccess.ReadWrite))
{
newFile = new byte[newFileStream.Length];
newFileStream.Read(newFile, 0, newFile.Length);
newFileStream.Close();
var ms = new MemoryStream(newFile);
var image = new BitmapImage();
image.SetSource(ms);
theImage.Source = image;
}
}
}
我一直在搜索帖子,但我找不到让它工作的好方法,因为如果我立即调用它,我会遇到异常。 我需要做的是打开文件将其从base64转换为.png,然后在保存后加载.png文件。 如果有人可以帮助我,我将不胜感激。
谢谢鲍勃。
【问题讨论】:
-
我不明白为什么这个问题被否决了。它提供了回答问题所需的所有细节。
-
您不应该使用 async void,将您的方法更改为 async Task
-
@vcsjones 我也不明白...
标签: c# visual-studio-2012 asynchronous windows-phone-8 async-await