我想在我的構造函數中獲取一個文件夾。所以,我需要一個非異步方法。在CreateFolderAsync期間拋出System.InvalidOperationException
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應用商店應用中,我們需要以異步方式進行操作?難道它不是簡單的事情不必要的複雜嗎?
我可以知道爲什麼'GetResults'調用可能會產生'System.InvalidOperationException'嗎?我以爲GetResults的意思是,「等到文件夾完成創建,並將結果返回給調用者」? –
和爲什麼我們不能有一個簡單的形式'Directory.CreateDirectory'? http://msdn.microsoft.com/en-us/library/54a0at6s.aspx在我的個人視圖中,不需要將目錄創建爲異步。它使事情變得不必要複雜 –
任何磁盤IO操作都是異步編程的絕佳選擇。磁盤訪問速度非常慢,可能會受到許多其他進程的影響。如果有一個後臺進程將磁盤推到100%的使用率,並且在接下來的五分鐘內會這樣做(想到視頻處理)。如果您的應用完全停止五分鐘,直到文件夾被創建? –