以其他形式停止ITask

问题描述

我有一个可以打开第二个表单的表单。

在第二个表单上,我启动一个任务。此表单在关闭时是免费的,我需要使用全局变量来测试是否已分配了此任务,并且未取消该任务,否则由于该任务是免费的,因此会出现异常。

是否存在更好的方法?也许没有任何全局变量

// [...]

type
  TfrmTest = class(TForm)
    nbRun: TNumberBox;
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    FTaskNumber: ITask;

    procedure RunTaskNumber;
  end;

// [...]

procedure TfrmTest.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned(FTaskNumber) then
    FTaskNumber.Cancel;

  Action := TCloseAction.caFree;
end;

procedure TfrmTest.FormCreate(Sender: TObject);
begin
  FTaskNumber := nil;
end;

procedure TfrmTest.FormShow(Sender: TObject);
begin
  RunTaskNumber;
end;

procedure TfrmTest.RunTaskNumber;
begin
  FTaskNumber := TTask.Run(procedure
                           var
                             i: integer;
                           begin
                             i := 0;

                             while Assigned(FTaskNumber) and (FTaskNumber.Status <> TTaskStatus.Canceled) do
                             begin
                               Sleep(2000);
                               TInterlocked.Increment(i);

                               if Assigned(FTaskNumber) and (FTaskNumber.Status <> TTaskStatus.Canceled) then
                               begin
                                 TThread.Queue(nil,procedure
                                                    begin
                                                      nbRun.Value := i;
                                                    end);
                               end;
                             end;
                           end);
end;

end.

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)