2013-03-06 45 views
0

我試圖從Windows商店應用程序的「我的圖片」文件夾中創建文件夾結構。但我似乎無法通過第一級。從Windows應用商店應用程序的「我的圖片」中創建子文件夾

我用下面的代碼創建我的第一個級別的文件夾:

IAsyncOperation<StorageFolder> appFolder = Windows.Storage.KnownFolders.PicturesLibrary.GetFolderAsync("AppPhotos"); 

if (appFolder==null) 
{ 
    //Create folder 
    appFolder = Windows.Storage.KnownFolders.PicturesLibrary.CreateFolderAsync("AppPhotos"); 
} 

現在我要創建這個叫1級以下另一個文件夾。

我期待能做到以下幾點:

appFolder.CreateFolderAsync("Level1"); 

但我沒有從我的appFolder一個CreateFolderAsync方法。

那麼,如何創建該文件夾,然後我將如何選擇它?

在此先感謝

我使用Visual Studio 2012,C#4.5,XAML和我正在寫一個Windows商店應用。

回答

7

您似乎錯過了那裏的異步/等待革命,並假設獲取文件夾的操作是一個文件夾。這應該工作:

var appFolder = await Windows.Storage.KnownFolders.PicturesLibrary.GetFolderAsync("AppPhotos"); 

if (appFolder == null) 
{ 
    //Create folder 
    appFolder = await Windows.Storage.KnownFolders.PicturesLibrary.CreateFolderAsync("AppPhotos"); 
} 

您還需要添加async關鍵字的方法簽名的地方,上面的代碼會被定位然後又如果你的方法返回T類型的值 - 更改它返回Task<T>,所以方法簽名:

private void MyMethod() 

你將它更改爲

private async Task MyMethod() 

,如果你當前的Signa自命爲

private bool MyMethod() 

,你需要做的

private async Task<bool> MyMethod() 

終於在最後一種情況 - 你還需要從

var myValue = MyMethod(); 

改變你的來電

var myValue = await MyMethod(); 

等標記所有的方法使用async關鍵字進行等待其他方法的調用。

+1

的'async'當量的'void'-返回方法的是'異步Task',不'異步void'。除此之外,很好的答案。 – 2013-03-06 22:32:30

+0

對,我忘了規則是爲了避免火災和忘記異步方法。 – 2013-03-06 22:51:10

+0

但你還沒有回答我的問題。我已經可以創建名爲AppPhotos的文件夾,但我希望能夠在Level1中創建一個文件夾。這是個問題 – Sun 2013-03-07 10:19:21

0

要創建文件夾,並在圖片庫中的子文件夾中:

StorageFolder appFolder; 
    try 
    { 
     appFolder = await Windows.Storage.KnownFolders.PicturesLibrary.GetFolderAsync("AppPhotos"); 

    } 
    catch (Exception ex) 
    { 

     appFolder = null; 

    } 
if (appFolder == null) 
    { 

    //Create folder 
    appFolder = await Windows.Storage.KnownFolders.PicturesLibrary.CreateFolderAsync("AppPhotos"); 

    } 

    //Create sub-folder 
    await appFolder.CreateFolderAsync("level1"); 
相關問題