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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine denke ist, dass Ihr
DoWork
ist eine Ausnahme zu werfen und so IhreRunWorkerCompleted
genannt wird.Beachten Sie, dass Ausnahmen, die in einem BGW ist
DoWork
Methode nicht gefangen werden, in einen try...catch inRunWorkerCompleted
; statt, das Muster ist zu prüfen, ob dieError
Eigenschaft inRunWorkerCompleted
'sRunWorkerCompletedEventArgs
- parameter nicht null ist. Wenn dies nicht null ist, haben Sie eine Ausnahme.Könnten Sie überarbeiten Ihre
RunWorkerCompleted
code wie folgt:Sehen Der BackgroundWorker-Klasse.RunWorkerCompleted-Ereignis für weitere Informationen und ein besseres Beispiel als meine.
War es für mich, dass mein Haupt-Projekt wurde unterzeichnet und die neue DLL, die ich gebracht war nicht. Es ist komisch, weil ich nie eine Warnung oder ein Fehler und das Projekt kompiliert ok. Nur, dass die background_dowork() würde nie zu einem Treffer in debug. Einmal habe ich Hinzugefügt, bei der Unterzeichnung cert auf die DLL begann es, dass backgroundworker einwandfrei.