C# background-worker nicht auslösen dowork-Ereignis auf jedem pc neben meinen eigenen

Ich habe ein echt komisches Problem mit einem background-worker in einer meiner Anwendungen. Ich habe vor kurzem überholt es leicht mit einige GUI-Korrekturen aber nun, wenn jemand auf einem anderen PC läuft .exe oder baut mein OneClick-deployment-hintergrund-Arbeiter nicht in der dowork-Ereignis. Die Logik hat sich nicht geändert zwischen den 2 Versionen. Ich habe ein vergleichen und neben dem hinzufügen mehr Fehler-Protokollierung hat sich nichts geändert.

Habe ich so weit gegangen, um eine message-Boxen und Haltepunkte in der dowork-Ereignis, aber es nie in die es überall außer auf meinem eigenen PC. Selbst wenn ich die remote-debug-it doesnt geben Sie die DoWork-Ereignis

Irgendwelche Vorschläge?

Schaltfläche klicken, ruft sogar die runworkerasync erfasst Ereignis

private void ScanButton_Click_1(object sender, RoutedEventArgs e)
    {

        Scan = new BackgroundWorker();
        Scan.WorkerReportsProgress = true;
        Scan.DoWork += new DoWorkEventHandler(Scan_DoWork);
        Scan.ProgressChanged += new ProgressChangedEventHandler(Scan_ProgressChanged);
        Scan.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Scan_RunWorkerCompleted);
        Scan.RunWorkerAsync();
    }

Unten ist der code, der ausgeführt wird das DoWork-Ereignis. Ive entfernt die anderen Funktionen, die es tut, der Einfachheit halber. Alle es tut, ist das ausführen einer Funktion, die eine Zeichenfolge zurückgibt und Orte in der Liste genannt scanresults.

private BackgroundWorker Scan;

    public void Scan_DoWork(object sender, DoWorkEventArgs e)
    {

        System.Windows.Forms.MessageBox.Show("Inside the DoWork");

        BackgroundWorker bw = sender as BackgroundWorker;

        float percentageDone = 0.0F;

        ScanResults = new List<string>();

        try
        {

            System.Windows.Forms.MessageBox.Show("Doing first scan check");

            ScanResults.Add(Functions.LocalComputerName());
            percentageDone = ((1 / 1f) * 100f);
            bw.ReportProgress((int)percentageDone);

        }
        catch (Exception ex)
        {
            System.Windows.MessageBox.Show(ex.Message, "Error Encountered", MessageBoxButton.OK, MessageBoxImage.Exclamation);
        }
    }


public void Scan_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        try
        {
            if (ScanResults.Count == 0)
            {
                System.Windows.Forms.MessageBox.Show("Empty");
                return;
            }
            MachineNameBox.Text = ScanResults[0];
        }
        catch (Exception ex)
        {
            System.Windows.MessageBox.Show(ex.Message, "Error Encountered", MessageBoxButton.OK, MessageBoxImage.Exclamation);
        }
    }

Es ignoriert völlig das dowork-Ereignis und wechselt in den runworkercomplete Veranstaltung und übergibt einen Fehler an, für den der index offensichtlich weil die Liste nicht gefüllt, als die Funktion, die übersprungen wurde. Wieder dieses funktioniert perfekt auf meinem PC, aber nicht auf andere, egal wie ich lasse es Ihnen.

Dank für jede Hilfe, die

  • System.Windows.Formen.MessageBox.Show("Innerhalb der DoWork"); wahrscheinlich nicht funktionieren, die aus einem BackgroundWorker. Set-e.Ergebnis die Ausnahme in DoWork und überprüfen, ob e.Ergebnis enthält eine Ausnahme in der RunWorkerCompleted-Ereignis.
InformationsquelleAutor Brandonm | 2011-11-24
Schreibe einen Kommentar