2015-08-21 23 views
-1

我想創建一些嵌套文件夾對象即時通訊發送如果有父母身份證當我調試後,等待它的行爲就像打破它不遵循下一個代碼行我能做什麼我無法找到任何解決方案互聯網。異步方法doesnt繼續以下代碼

public class FileOperations 
{ 
    StorageFolder newFile,newFolder; 
    List<StorageFolder> folderList = new List<StorageFolder>(); 
    public async void CreatingFiles(int cat, int par, string name) 
    { 
     StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder; 
     if (par == 0) 
     { 
      StorageFolder file = Windows.Storage.ApplicationData.Current.LocalFolder; 
      newFile = await file.CreateFolderAsync(name, CreationCollisionOption.ReplaceExisting); 
      folderList.Add(newFile); 
     } 

     else 
     { 
      for (int i = 1; i <= folderList.Count; i++) 
       if (par == i) 
       { 
        newFolder = await folderList[par - 1].CreateFolderAsync(name, CreationCollisionOption.ReplaceExisting); 
folderList.Add(newFolder); 
       } 
     } 
    } 
    public Task InitializeAsync() 
    { 
     return InitializeOfflineFilesAsync(); 
    } 

    private Task InitializeOfflineFilesAsync() 
    { 
     throw new NotImplementedException(); 
    } 

    private async Task<StorageFolder> CF(string name, CreationCollisionOption replaceExisting, StorageFolder file) 
    { 
     return await file.CreateFolderAsync(name, replaceExisting); 
    } 
} 
+1

問題是什麼?什麼不行?另外你的其他部分怎麼處理循環?它讓我想起[For-If-Antipattern](http://blogs.msdn.com/b/oldnewthing/archive/2011/12/27/10251210.aspx) –

+2

而且你應該避免使用'async void'方法。它們幾乎完全存在於事件處理程序中。 'async Task'是與'void'同步方法的異步等效方法。 – Dirk

+0

你打電話給這個怎麼樣?你有沒有在你的調用堆棧上有一個「Wait」或「Result」? –

回答

0

您是否嘗試返回任務類型,而不是空洞的「CreatingFiles法」,並呼籲「CreatingFiles」法的await?

例如等待CreatingFiles(...);

我想你會調用異步方法幾次,你不希望其他異步方法啓動之前的異步方法完成,但它確實。爲了防止出現這種情況,您必須先調用「CreatingFiles」方法並等待它完成,然後繼續執行。

希望它有幫助。

-1

異步是指不依賴於彼此的結果,因此可以同時發生在不同線程上的進程。所以我認爲問題在於你跑了三分之一,然後你轉換不同的三分之一,如果你想繼續,你必須在同樣的三分之一。解決的辦法是對斷線代碼使用dispecher:

App.Current.Dispatcher.Invoke(async() => 
{ 
    var x = await ...; 
}); 
+0

它不適用於調度程序它說''應用程序'不包含'調度員'的定義和沒有擴展方法'調度員'接受類型'應用程序'的第一個參數可以找到(你是否缺少使用指令或一個程序集引用?)「它不接受使用System.Windows.Threading –