我想在构造函数中获取一个文件夹。所以,我需要一种非异步方法。
public static Windows.Storage.StorageFolder getStorageImagesDir()
{
Windows.Storage.StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder.CreateFolderAsync("images", CreationCollisionOption.OpenIfExists).GetResults();
return folder;
}
但是,如果该文件夹第一次不存在,则抛出System.InvalidOperationException
。 (不知何故,文件夹仍然被创建,甚至抛出异常)
当文件夹已存在时,该功能正常。
我的代码可能有问题吗?
在Desktop .NET,Java,Python ......中,我们可以通过一个简单的单线API调用来执行文件夹创建。例如,.NET中的Directory.CreateDirectory
,Java中的File.mkdirs
,...那么,为什么在Windows应用商店应用中,我们需要以异步方式执行此操作?是不是简单的事情变得多么复杂?
答案 0 :(得分:2)
从MSDN中的某人那里获取代码。
StorageFolder folder = ApplicationData.Current.LocalFolder.CreateFolderAsync("images", CreationCollisionOption.OpenIfExists)
.AsTask()
.Result;
return folder;
答案 1 :(得分:0)
问题是您正在尝试在构造函数中执行异步操作。构造函数本身不是异步的,因此您可能在实际创建文件夹之前尝试运行操作(GetResults)。
您有两种选择:
无论哪种方式,对于您将获得的文件夹的唯一有效引用是等待异步操作。否则它将在操作完成之前返回。