Ich weiß, dass diese Frage mehrmals gepostet hat, aber diese Situation ist anders. Vorausgesetzt, dass ich eine Methode ausführe, die mehrere Elemente durchlaufen muss (Datenbankzeilen), benötigt dies viel Zeit.
Jetzt in meinem BackgroundWorker
muss ich in einigen Fällen die Synchronisation stoppen, insbesondere wenn der Benutzer eine Taste drückt. Was ich tat, im _DoWork
Ereignis ist dies:Kann den BackgroundWorker nicht stoppen
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
while (!worker.CancellationPending)
{
LongOperation();
}
}
jetzt ist das Problem, dass wenn ich worker.CancelAsync()
nennen die LongOperation()
die Ausführung fortsetzen sollte aber nicht! Denn die while
haben den Zustand CancellationPending
. Ich sah im Netz, dass diese Lösung thread-safe
ist, also mache ich vielleicht etwas falsch?
Was meinst du? Erwarten Sie, dass LongOperation() in der Mitte seiner Ausführung unterbrochen wird? –
@AdrianoRepetti Genau, ich muss es mitten in der Ausführung stoppen – IlDrugo
Sie müssten in LongOperation gehen und alle Loops, die Sie dort haben, verlassen. – LarsTech