Backgroundworker das RunWorkerCompleted-Ereignis ausgelöst noch vor Abschluss der arbeiten

Ich bin mit dem BackgroundWorker thread eine lange Aufgabe ausführen(im Grunde das Lesen eine große xml-Datei). Für die erste Zeit, die der Arbeiter arbeitet fein wie gewünscht, aber wenn ich hochladen eine zweite xml-Datei, mit dem gleichen hintergrund-worker funktioniert es manchmal, aber die meiste Zeit der Backgroundworker ist RunWorkerCompleted ausgelöst wird, noch bevor der DoWork-Ereignis. Einige der code, der unten angezeigt wird

    private void openFile_Click(object sender, RoutedEventArgs e)
    {
          //Code removed for brevity
  worker = new BackgroundWorker();
            worker.RunWorkerAsync();
            worker.DoWork += new DoWorkEventHandler(worker_DoWork);
            worker.WorkerReportsProgress = true;
            worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
            worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
       }

        void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        DataImport();
        //worker.Dispose();
        //worker.Disposed += new EventHandler(worker_Disposed);
        //worker.DoWork -= worker_DoWork;
        //worker.RunWorkerCompleted -= worker_RunWorkerCompleted;
        //worker = null;
        //GC.Collect(GC.GetGeneration(worker), GCCollectionMode.Forced);
    }

Arbeitnehmer ist eine Global definierte variable. Was ist hier falsch bin ich nicht immer. Bitte helfen

  • Ein paar Tipps zum Abschluss: Don ' T call GC.Collect(), Tun, überprüfen e.Error.
  • Nicht zu beantworten, w/o zu sehen, mindestens eine Kontur in der DoWork().
  • Wenn Ihr DoWork-Funktion erstellt einen thread für die Durchführung Ihrer Arbeit, und Sie nicht .Join(), DoWork wird schlagartig wieder. Aber wie @Henk sagte, müssen sehen, was DoWork tut.
InformationsquelleAutor Vikram | 2013-07-29
Schreibe einen Kommentar