Benutzer meiner Anwendung geben HTML in ein TextBox-Steuerelement ein.
Ich möchte, dass meine Anwendung ihre Eingaben im Hintergrund validiert.
Da ich den Validierungsdienst nicht hämmern möchte, habe ich versucht, vor jeder Validierung eine Verzögerung von einer Sekunde einzubauen.
Ich bin jedoch nicht in der Lage, einen bereits laufenden BackgroundWorker-Prozess korrekt zu unterbrechen.
Mein Visual Basic-Code:
%Vor%Nach dem Aufruf von CancelAsync () meines BackgroundWorker scheint IsBusy niemals False zu werden. Es bleibt in einer Endlosschleife stecken.
Was mache ich falsch?
Sie müssen in Ihrer Prozessroutine für Hintergrund-Worker nach backgroundWorkerPageProcess.CancellationPending
suchen.
und gehen Sie entsprechend aus. Dann, sobald es Ihre while-Schleife gibt, sollte isBusy entsprechend markiert werden.
Update: Nachdem Sie Cancel = true gesetzt haben, kehren Sie aus der Methode zurück? hier spucken Update 2: Sie haben das WorkerSupportsCancellation Flag auf dem Hintergrundarbeiter auf True festgelegt? Auch in Worker Completed-Methode zurückgegeben, wenn e.Cancelled .... mehr spitballs
Update 3: nach ein paar Überprüfungen und Kompilationen scheint mir das verdammte Ding innerhalb der gleichen Methode nie wieder aus dem Busen herauszukommen. - Eine Option besteht darin, die Taste bei Besetzt zu deaktivieren und eine andere zu deaktivieren, nur damit der Benutzer die Überprüfung zurückklickt. -Oder auf Ihrer Arbeitskraft abgeschlossene Methode, wenn (e.Cancelled) Ihre Validierungsmethode mit geeignetem Text aufruft ....
Wie auch immer, ist eine Art Büste. Tut mir leid, hier nicht viel zu helfen.
Ich habe die Antwort in diesem Artikel gefunden:
BackgroundWorker Closure und Overridable Task von Patrick Smacchia
Ich habe seinen Code angepasst:
%Vor%Tags und Links .net multithreading backgroundworker