2017-07-19 31 views
-2

我想在後臺執行任務而不凍結主用戶界面。但是,我在使用C#中的匿名函數Task.Run()時遇到了一些問題,因爲它似乎不執行代碼。我認爲我的實施可能不正確。C#中的Task.Run()不執行某些部分

private List<string> GetPdfList 
{ 
    get 
    { 
     return File.Directory.GetFiles(PDF_FILE_DIRECTORY); 
    } 
} 

private void InitializePdf() 
{ 
    if (GetPdfList.Count > 0) 
    { 
     foreach (var pdf in GetPdfList) 
     { 
      var converter = new PdfConvertor(); 
      var format = ImageFormat.Png; 
      converter.Convert(pdf, TempFolder, format); 
     } 

    } 
} 


public MainForm() 
{ 
    InitializeComponent(); 
    Task.Run(() => 
    { 
     InitializePdf(); 
    }); 
} 

我認爲這個問題是在的foreach範圍

+1

設置斷點並使用調試程序檢查a)執行是否完全到達循環,以及b)列表是否包含元素。此外,構造函數可能不是創建線程的最佳位置。使用Load事件或(第一個)激活事件。 – dlatikay

+0

'可能'是特權問題,請嘗試在主線程上運行'InitializePdf();'以確保它使用'Task.Run(...)'探測' – YukiNyaa

+0

它在主線程上運行時效果很好 –

回答

-6

Task.Run()創建任務,但不執行它。 爲了做到你想做的事,你應該等待異步事件中的任務結果。 請參見Async loading for winforms

+3

這不是真正。 'Task.Run()'*確實*啓動任務運行,因此名稱。請注意,這裏沒有結果。 –