Aktualisierung von hintergrund-Arbeiter async-await

So ist dies, wie ich derzeit mit hintergrund-Arbeiter zu retten, eine Menge Zeug, um die Datei während der Präsentation der user mit einer Fortschrittsanzeige und verhindert jegliche änderungen an der Benutzeroberfläche beim speichern ist in Arbeit. Ich denke, ich habe erobert die wesentlichen Merkmale. Der modal ProgressWindow zeigt einen Fortschrittsbalken und sonst nicht viel. Wie würde ich mich über eine änderung dieses zu async-await Muster, wenn ich musste?

private ProgressForm ProgressWindow { get; set; }

///<summary>On clicking save button, save stuff to file</summary>
void SaveButtonClick(object sender, EventArgs e)
{
  if (SaveFileDialog.ShowDialog() == DialogResult.OK)
  {
    if (!BackgroundWorker.IsBusy)
    {
      BackgroundWorker.RunWorkerAsync(SaveFileDialog.FileName);
      ProgressWindow= new ProgressForm();
      ProgressWindow.SetPercentageDone(0);
      ProgressWindow.ShowDialog(this);
    }
  }
}

///<summary>Background worker task to save stuff to file</summary>
void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
{
  string path= e.Argument as string;

  //open file

  for (int i=0; i < 100; i++)
  {
    //get some stuff from UI
    //save stuff to file
    BackgroundWorker.ReportProgress(i);
  }

  //close file
}

///<summary>On background worker progress, report progress</summary>
void BackgroundWorkerProgressChanged(object sender, ProgressChangedEventArgs e)
{
  ProgressWindow.SetPercentageDone(e.ProgressPercentage);
}

///<summary>On background worker finished, close progress form</summary>
void BackgroundWorkerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
  ProgressWindow.Close();
}
  • Gut, beginnen Sie mit der Entfernung Ihres backgroundworker, dann prüfen Sie diese Seite. Await-Async
  • Fortschritt melden mit async verwenden Sie IProgress<T>. Siehe hier für mehr info.
  • Mein problem ist, dass es scheint nicht, um irgendetwas für mich zu await
  • Wenn Sie File Klasse statische Methoden, es gibt nichts zu erwarten. Aber beachten Sie, dass alle Datei-stream-Verwandte Methoden haben Ihre asynchronen Versionen, die kannst du natürlich erwarten. Müssen nur die Art und Weise ändern Sie die Programm-Operationen.
InformationsquelleAutor Graham | 2016-02-10
Schreibe einen Kommentar