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 などでは、単純な 1 行の API 呼び出しでフォルダーの作成を実行できます。たとえば、Directory.CreateDirectory.NET やFile.mkdirsJava では...では、なぜ Windows ストア アプリでは非同期で行う必要があるのでしょうか。シンプルなものを不必要に複雑にしていませんか?

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) を実行しようとしている可能性があります。

次の 2 つのオプションがあります。

  1. 非同期メソッドを作成し、そのメソッド内で非同期を取得して初期化する呼び出しを待機するか、
  2. フォルダー コードをコンストラクターから移動して、明示的な初期化を行うことができます。

いずれにせよ、取得するフォルダーへの唯一の有効な参照は、非同期操作を待機している場合です。そうしないと、操作が完了する前に返されます。

于 2012-11-28T12:29:21.007 に答える