2017-07-19 2 views
-2

Ich möchte eine Aufgabe im Hintergrund ausführen, ohne die Hauptbenutzeroberfläche zu blockieren. Allerdings habe ich ein Problem mit Task.Run() mit anonymer Funktion in C#, weil es scheint, als ob es den Code nicht ausführt. Ich denke, dass meine Implementierung falsch ist.Task.Run() in C# führt einige Teile nicht aus

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(); 
    }); 
} 

ich glaube, das Problem ist in foreach Umfang

+1

Legen Sie einen Haltepunkt fest und verwenden Sie den Debugger, um zu überprüfen, ob die Ausführung a) die Schleife überhaupt erreicht und b) die Liste Elemente enthält. Der Konstruktor ist möglicherweise auch nicht der beste Ort zum Erstellen des Threads. Verwenden Sie das Load-Ereignis oder das (erste) Activate-Ereignis. – dlatikay

+0

'Might' sein Privileg-Problem, versuchen Sie 'InitializePdf();' auf Haupt-Thread um sicherzustellen, dass es mit 'Task.Run (...)' Probem. – YukiNyaa

+0

Es funktioniert perfekt, wenn es auf dem Haupt-Thread –

Antwort

-6

Task.Run() erzeugt die Aufgabe, sich aber nicht ausführen. Um zu tun, was Sie wollen, sollten Sie auf das Ergebnis der Aufgabe in einem asynchronen Ereignis warten. Siehe Async loading for winforms

+3

läuft Das ist nicht wahr. 'Task.Run()' * startet die Aufgabe, daher der Name. Beachten Sie, dass hier kein Ergebnis angezeigt wird. –