我正在编写一个 windows phone 8 应用程序,我想让用户在我的应用程序中使用保存到他们 skydrive 的图像。我遇到问题的一段代码(我相信)如下。
StorageFile thefile = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("b4b.png", CreationCollisionOption.ReplaceExisting);
Uri theuri = new Uri("ms-appdata:///local/b4b.png");
var thething = await client.BackgroundDownloadAsync(filepath, theuri); <--- line where program crashes
BitmapImage src = new BitmapImage();
src.SetSource((Stream)await thefile.OpenReadAsync());
WriteableBitmap image = new WriteableBitmap(src);
用户需要做的所有登录和身份验证工作都已经完成,并且可以按预期工作。当我的程序到达标记线时,它突然崩溃了。我收到的错误是......
A first chance exception of type 'System.ArgumentException' occurred in Microsoft.Live.DLL
A first chance exception of type 'System.ArgumentException' occurred in mscorlib.ni.dll
A first chance exception of type 'System.ArgumentException' occurred in mscorlib.ni.dll
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\windows\system32\en-US\mscorlib.debug.resources.dll'. Module was built without symbols.
A first chance exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.ni.dll
有谁知道如何解决这一问题?
我插入断点来跟踪程序,似乎正在制作存储文件并且 uri 是正确的,但是当我尝试将文件下载到它时,程序给了我错误。我确认 skydrive 上文件的文件路径也是正确的。如果我尝试使用 DownloadAsync() 代替它似乎可以工作,但是当我尝试使用从 skydrive 文件获得的流时程序崩溃并给出相同的错误。
有任何想法吗?因为我无法弄清楚可能出了什么问题。
正在下载的文件是 png 图像。
编辑:找到解决方案
经过更多研究后,我发现当您从 skydrive 下载文件时,会调用文件 ID...
filepath = result.id;
如上所述,它不会为您提供文件的内容。我没有检查它获得了什么,但我认为它可能是元数据。要获取文件的实际内容,您必须添加“/contents”。
正确的路径将是
filepath = result.id + "/contents";
我编辑了我的代码,如下所示,它现在可以完美运行。
StorageFile thefile = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("b4b.png", CreationCollisionOption.ReplaceExisting);
Uri theuri = new Uri("ms-appdata:///local/b4b.png", UriKind.Absolute);
var thething = await client.DownloadAsync(filepath + "/content");
Stream stream = thething.Stream;
stream.Seek(0, SeekOrigin.Begin);
BitmapImage src = new BitmapImage();
src.SetSource(stream);
希望这可以帮助任何和我有同样问题的人!