使用并行编程库(TTask)进行数据集交互

时间:2015-12-12 14:29:45

标签: multithreading delphi-xe7

目标是:

  • 循环数据集,使用类实例查找某些特定数据;
  • 保存数据库中的返回数据;
  • 在屏幕上显示更新的数据。

然而,它正在发生非常冻结。 " MyClass的"没有内存泄漏,高超时等...

所以我的问题是:我试图实施的代码出了什么问题,哪种解决方案最好?

  

PS:崩溃只发生在多线程中。如果相同的代码   没有多线程使用,一切都很好。

var T: ITask;
begin

  FMyDataModule.DataSet.First;


T := TTask.Create(procedure
                        begin


  while not FMyDataModule.DataSet.Eof do begin

       //Do the job 
        try
            MyClass  :=  TMyClass.Create;
            MyClass.SearchAndSaveToDatabase; //IdHttpRequest
        finally
            MyClass.Free;
        end;


       //Update UI, go next dataset record
       TThread.Synchronize(nil,
          procedure()
          begin

            //Go next record and update on UI
            FMyDataModule.DataSet.RefreshRecord;
            FMyDataModule.DataSet.Next;

           end);


      end; //end while
      end);

      //Start the task
      T.Start;

0 个答案:

没有答案