BackgroundWorker reportProgress in einer anderen Klasse
Ich habe einen ähnlichen code wie der Letzte code in diesem link:
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
Aber die ComputeFibonacci Methode ist, die innerhalb einer anderen Klasse, so meine doWork-Methode wäre diese:
private void backgroundWorker1_DoWork(object sender,
DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
e.Result = new MyClass().ComputeFibonacci((int)e.Argument, worker, e);
}
Mein code sperrt die Anwendung für immer, wenn ich den Arbeiter.ReportProgress(percentComplete);
innerhalb der fibonaci-Methode, die in einer anderen Klasse. Ich denke, das problem ist, dass die backgroundWorker1_ProgressChanged ist, die innerhalb einer anderen Klasse, statt MyClass.
Was soll ich bitte tun?
Wenn ich die fibonaci-Methode innerhalb der gleichen Klasse, das problem nicht auftreten. Aber in meinem Fall nicht Sinn, den code in der gleichen Klasse.
Dank
die nur wie der Letzte code in den link, den ich schrieb.
Ja, können Sie näher erläutern, was du meinst, dass Ihr backgroundWorker1_ProgressChanged Methode in einer anderen Klasse? Könnten Sie ein kleines Beispiel?
Schauen Sie, in diesem link. Alle Methoden sind innerhalb der FibonacciForm. Aber ich will das Fibonaci-Methode innerhalb einer anderen Klasse, und nennen Sie es. Immer noch nicht verstanden? Ich rufe also mit new MyClass().fibonaci()
Ich verstehe, wie Sie eine BackgroundWorker-Klasse. Es ist kein problem mit der Verwendung einer anderen Klasse in einem BackgroundWorker, dein problem muss vorhanden sein in dem, was Sie tatsächlich tun, in Ihren anderen Klasse. Wie die vorige Antwort sagt, müssen Sie irgendeine Art von Schleife. Wir brauchen mehr Informationen, was deine andere Klasse ist zu tun, um das problem zu verstehen.
InformationsquelleAutor alansiqueira27 | 2011-04-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Machen
MyClass
Feuer ein Ereignis:Sowas.
Bearbeitet meine Antwort, Sie sollten es vermeiden, Weitergabe um die Arbeiter, events verwenden.
Nettes kleines bisschen code, H. B. war ich im Begriff zu schreiben, ein Beispiel mit einer
static
Methode fürComputeFibonacci
, aber dann würde ich Probleme haben mit der anderen Klasse Methoden, wie Sie Sie definiert haben.Das habe ich versucht, aber leider ist der Bildschirm immer noch freezen =/
Hat Ihr fibonacci-Methode arbeiten, wie kündigen? Sie sollten versuchen, ein paar breakpoints setzen und Schritt durch einige cruicial teilen, könnte das problem liegen in einem ganz anderen Teil des Codes, dass Sie nicht die post.
InformationsquelleAutor H.B.
Dieser link vielleicht helfen http://blog.decarufel.net/2009/03/good-practice-to-use-dispatcher-in-wpf.html
ja, Backgroundworker versucht, die Arbeit zu tun, aber manchmal schlägt es fehl, Sie werden dies feststellen, wenn Sie spielen mit verschiedenen STA/MTA-COM-Objekte drin 🙂
InformationsquelleAutor taher chhabrawala
Den ProgressChanged-event-handler sollten in der gleichen Klasse wie die DoWork-Ereignishandler.
In Ihrem ComputeFibonacci-Methode, würde man in der BackgroundWorker-Objekt und rufen die Arbeiter.ReportProgress-Methode. Dies sollte rufen Sie das ProgressChanged-delegieren.
Die Handler können in jeder Klasse (Instanz-oder statische).
Sie können auch nicht in der Klasse an alle - anonyme Methoden und Lambda-Ausdrücke so gut funktionieren.
InformationsquelleAutor micahtan