none
Probleme mit BackgroundWorker RRS feed

  • Frage

  • Hallo,

    ich versuche mich gerade mit Backgroundworker und möchte Tabllen mit Fileinfos füllen lassen dazu folgender Code in der cs

    public FolderModel() { worker.DoWork += worker_DoWork; worker.RunWorkerCompleted += worker_RunWorkerCompleted; worker.RunWorkerAsync(); worker2.DoWork += worker_DoWork2; worker2.RunWorkerCompleted += worker_RunWorkerCompleted2; worker2.RunWorkerAsync(); _warpVisible = Visibility.Collapsed; OnPropertyChanged("WrapVisible"); }

    private void worker_DoWork(object sender, DoWorkEventArgs e)
            {
                CreateOld();

            }

            private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                if (round == 2)
                {
                    worker3.DoWork += worker_DoWork3;
                    worker3.RunWorkerCompleted += worker_RunWorkerCompleted3;
                    worker3.RunWorkerAsync();
                }
            }

     public void CreateOld()
            {
                if (GlobalData.OldWithData == null)
                {
                    GlobalData.OldWithData = new DataTable("OldTable");
                }
                
                DataColumn newColumn = new DataColumn();
                GlobalData.OldWithData.Columns.Add("Datum", typeof(String));
                GlobalData.OldWithData.Columns.Add("Pfad", typeof(String));
                GlobalData.OldWithData.Columns.Add("Dateiname", typeof(String));
                GlobalData.OldWithData.Columns.Add("Endung", typeof(String));
                GlobalData.OldWithData.Columns.Add("Version", typeof(String));
                GlobalData.OldWithData.Columns.Add("Groesse", typeof(int));
                GlobalData.OldWithData.Columns.Add("CRC", typeof(String));
                GlobalData.OldWithData.Columns.Add("DateiOrdner", typeof(String));
                GlobalData.OldWithData.Columns.Add("More/Fail", typeof(int));

                for (int i = 0; i < GlobalData.OldItems.Rows.Count - 1; i++)
                {
                    string Pfad = GlobalData.OldInstallPath + "\\" + GlobalData.OldItems.Rows[i].ItemArray[0].ToString();
                    FileInfo newInfo = new FileInfo(Pfad);
                    FileVersionInfo newversion = FileVersionInfo.GetVersionInfo(Pfad);
                    DataRow newrow = GlobalData.OldWithData.NewRow();
                    newrow[0] = newInfo.CreationTime.ToString();
                    newrow[1] = newInfo.DirectoryName.ToUpper().ToString();
                    newrow[2] = newInfo.Name.ToUpper().ToString();
                    newrow[3] = newInfo.Extension.ToUpper().ToString();


    von CreateOld() nur den Anfang, weil ich da Probleme bekomme.

    Und zwar sobald er anfängt die FileVersionInfo auszuführen bricht er die weitere verarbeitung ab und springt in

    worker_RunWorkerCompleted()

    warum ??

    danke

    Cay

    Mittwoch, 26. November 2014 15:19

Antworten

  • Hallo Cay,

    schau Dir die Error-Eigenschaft der RunWorkerCompletedEventArgs an, denn wahrscheinlich kommt es zu einer Ausnahme, die von DoWork abgefangen wird. Dann wird DoWork beendet und das RunWorkCompleted Ereignis ausgelöst.

    Um das zu verhindern, baue eine Fehlerbehandlung (try ... catch) ein. Ich könnte mir denken, dass beim Zugriff auf die Dateien, das eine oder andere Probleme auftritt.

    Im übrigen sollte man auf gemeinsame Daten nicht ohne Synchronisation zugreifen - GlobalData lässt so einiges vermuten...

    Gruß Elmar

    • Als Antwort markiert joksch_c Mittwoch, 26. November 2014 15:48
    Mittwoch, 26. November 2014 15:31
    Beantworter

Alle Antworten

  • Hallo Cay,

    schau Dir die Error-Eigenschaft der RunWorkerCompletedEventArgs an, denn wahrscheinlich kommt es zu einer Ausnahme, die von DoWork abgefangen wird. Dann wird DoWork beendet und das RunWorkCompleted Ereignis ausgelöst.

    Um das zu verhindern, baue eine Fehlerbehandlung (try ... catch) ein. Ich könnte mir denken, dass beim Zugriff auf die Dateien, das eine oder andere Probleme auftritt.

    Im übrigen sollte man auf gemeinsame Daten nicht ohne Synchronisation zugreifen - GlobalData lässt so einiges vermuten...

    Gruß Elmar

    • Als Antwort markiert joksch_c Mittwoch, 26. November 2014 15:48
    Mittwoch, 26. November 2014 15:31
    Beantworter
  • Hallo,

    ich sollte einfach lernen try/catch zu verwenden.

    recht herzlichen dank habe meinen Fehler dadurch gefunden.

    Die Pfadauflösung war verkehrt und deswegen hat er abgebrochen.

    grüße

    Cay

    Mittwoch, 26. November 2014 15:50