1

我想在我的构造函数中获取一个文件夹。所以,我需要一个非异步方法。

    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 调用。例如,Directory.CreateDirectory在 .NET 中,File.mkdirs在 Java 中,...... 那么,为什么在 Windows Store App 中,我们需要以异步方式进行呢?它不会使简单的事情变得不必要的复杂吗?

4

2 回答 2

2

从 MSDN 中的某个人那里获取代码。

StorageFolder folder = ApplicationData.Current.LocalFolder.CreateFolderAsync("images", CreationCollisionOption.OpenIfExists)
                               .AsTask()
                               .Result;
return folder;
于 2012-11-28T15:37:49.903 回答
0

问题是您试图在构造函数中执行异步操作。构造函数本身不是异步的,因此您可能会在实际创建文件夹之前尝试运行操作 (GetResults)。

你有两个选择:

  1. 您可以创建一个异步方法,并在该方法中等待调用以使异步初始化,或者
  2. 您可以将文件夹代码移出构造函数并提供一些显式初始化。

无论哪种方式,您将获得的对文件夹的唯一有效引用是等待异步操作。否则它将在操作完成之前返回。

于 2012-11-28T12:29:21.007 回答