Übergeben von benutzerdefinierten Objekts RunWorkerCompleted-Ereignis im Fall einer Ausnahme

Meiner Console App verwendet System.ComponentModel.BackgroundWorker für Gewinde für Zwecke:

System.ComponentModel.BackgroundWorker backgroundWorker = new System.ComponentModel.BackgroundWorker();

backgroundWorker.DoWork += (sender, e) =>
     ReportStatus(worker, status, result, e);
backgroundWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
backgroundWorker.RunWorkerAsync(worker);

Wie Sie sehen können, dass ich mich übergeben "Arbeiter" als argument innerhalb runworkerasync erfasst.

Was ich erreichen will ist, dass wenn es eine Ausnahme innerhalb ReportStatus-Methode brauche ich den selben "Mitarbeiter" - Objekt so, dass ich durchführen kann, eine operation (einen Dienst Aufrufen zu Benachrichtigen, dass der Arbeitnehmer die Ausnahme)

private void ReportStatus(Worker worker, Status status, WorkResult result,System.ComponentModel.DoWorkEventArgs arg)
{
    var proxy = new PreparationServiceProxy(new NetTcpBinding(), new EndpointAddress(PreparationEngineState.ServiceAddress));
    try
    {
        proxy.ReportStatus(worker, status, result);
        proxy.Close();
    }
    catch (Exception)
    {
        arg.Result = worker;
        proxy.Abort();
        throw;
    }
}

In meiner exception-block (ich bin nicht sicher, ob dies der richtige Weg!) Ich bin die Zuordnung der Arbeitnehmer zu dem Ergebnis so dass ich bekommen kann die gleichen Arbeiter zurück, wenn das RunWorkerCompleted-Methode (backgroundWorker1_RunWorkerCompleted) ist ausgeführt :

private void backgroundWorker1_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{

    if (e.Error != null)
    {
        Worker worker = e.Result as Worker; //At this point I get an exception!
    }
}
  • welche Ausnahme machen Sie?
  • Also, was ist deine Frage??
  • Sorry wenn ich nicht klar war, aber die grundlegende Frage ist, dass im Innern "backgroundWorker1_RunWorkerCompleted" ich bekomme eine exception wenn ich versuche zu konvertieren mein argument zurück auf das worker-Objekt:
  • Da bin ich auslösen der Ausnahme (für die it-Blase bis zu backgroundWorker1_RunWorkerCompleted) , die exception die ich bekomme, ist : "Eine Ausnahme ist aufgetreten während der operation, so dass das Ergebnis ungültig. Check exception InnerException details."
Schreibe einen Kommentar