![]() |
Prüfen auf ITask.Status
Ich habe in einem TForm so was:
Code:
Beim Schließen des Formulars möchte ich prüfen, ob der Task läuft, um ihn abzubrechen:
Task : ITask;
.... Task:=TTask.Run();
Code:
1) Das geht aber nur, wenn der Task läuft, wenn er gar nicht gestartet wurde, kann ich nicht auf Task.Status zugreifen. Wie kann ich prüfen, ob es den Task gibt?
if Task.Status = TTaskStatus.Running then
Task.Cancel; 2) Das Beenden des Tasks dauert uU ein bisschen - wie kann ich warten, bis der Task beendet ist? Danke für Erleuchtung! |
AW: Prüfen auf ITask.Status
Was heißt "nicht auf Status zugreifen können"? Wenn er noch nicht gestartet wurde ist er entweder
Delphi-Quellcode:
oder
TTaskStatus.Created
Delphi-Quellcode:
.
TTaskStatus.WaitingToRun
"Warten bis der Task beendet ist" entspricht
Delphi-Quellcode:
:
WaitFor(..)
Delphi-Quellcode:
const
runningStates = [TTaskStatus.Running, TTaskStatus.WaitingForChildren]; begin if Assigned(asyncRefreshTask) then begin asyncRefreshTask.Cancel(); try if (asyncRefreshTask.Status in runningStates) then asyncRefreshTask.Wait(delayTimeMs); except // make a smug face end; asyncRefreshTask := nil; end; end; |
AW: Prüfen auf ITask.Status
|
AW: Prüfen auf ITask.Status
Zitat:
Wait nach Cancel liefert: EOperationCancelled with message 'Vorgang abgebrochen'. Wait wartet nur auf nicht abgebrochene Tasks. Dein Try/Except schluckt diese Exception. Und: Sobald Cancel aufgerufen wird, ist der Status des Tasks Canceled. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz