2017-07-19 6 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イベントまたは(最初の)Activateイベントを使用します。 – dlatikay

+0

'特権が問題になる可能性がありますので、 'Task.Run(...)'でprobemであることを確認するために' InitializePdf(); 'を実行してみてください – YukiNyaa

+0

メインスレッド上で実行すると完全に動作します –

答えて

-6

Task.Run(だと思う)は、タスクを作成しますが、それを実行しません。 必要な処理を実行するには、非同期イベントのタスク結果を待つ必要があります。 Async loading for winforms

+3

本当。 'Task.Run()' *はタスクの実行を開始します。ここには結果がないことに注意してください。 –

関連する問題