Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 从TWebAction中提取代码以便在主线程中同步?_Multithreading_Web Services_Delphi_Delphi 10 Seattle - Fatal编程技术网

Multithreading 从TWebAction中提取代码以便在主线程中同步?

Multithreading 从TWebAction中提取代码以便在主线程中同步?,multithreading,web-services,delphi,delphi-10-seattle,Multithreading,Web Services,Delphi,Delphi 10 Seattle,我很难从TWebActionItem中使用Synchronize My webservice是一个可视化的程序,其格式为TFormWebServices var FormWebServices: TFormWebServices; 这有一个属性FWebBrokerBridge:TIdHTTPWebBrokerBridge FWebBrokerBridge将twebModuleWebService注册为用于每个传入呼叫的类: FWebBrokerBridge.RegisterWebModuleC

我很难从
TWebActionItem
中使用Synchronize

My webservice是一个可视化的程序,其格式为
TFormWebServices

var FormWebServices: TFormWebServices;
这有一个属性
FWebBrokerBridge:TIdHTTPWebBrokerBridge

FWebBrokerBridge
twebModuleWebService
注册为用于每个传入呼叫的类:

FWebBrokerBridge.RegisterWebModuleClass(TWebModuleWebServices);
本课程中的
TWebActionItem
项用于阅读
TWebRequest
和编写
twebreResponse

有一个处理程序需要使用一些VCL可视化渲染(与另一个应用程序共享代码),我想将其与主线程同步(
FormWebServices

存根:

现在如何正确同步try/finally块? 我可以进入当前线程并执行一些简单的操作,如:

lThread := TThread.CurrentThread;
TThread.Synchronize(lThread,procedure
  begin
    FormWebServices.MmoLog.Lines.Add('Synchronize test');
  end);
但对于任何更复杂的事情,我都束手无策。
定义本地过程并将其输入同步无法工作(E2555无法捕获符号)。
如何提取try/finally块,以便在FormWebServices的上下文中正确执行它?

诀窍是将整个块放在匿名方法中(感谢提示,):

lThread := TThread.CurrentThread;
TThread.Synchronize(lThread,procedure
  begin
    FormWebServices.MmoLog.Lines.Add('Synchronize test');
  end);
if lFlexRapDM.DesignerCustomOpenDoc(lFlexRapDM.TimeTellReport) then
   begin
      .....
      lThread := TThread.CurrentThread;
      TThread.Synchronize(lThread,procedure
            var l,lIndex       : integer;
            ...
            begin
               lFrmDynRapport := TFormDynRapport.Create(Self);
               try
                  with lFrmDynRapport do
                  begin
                     ...
                  end; // with FrmDynReport
               finally
                  lFrmDynRapport.Free;
               end;
            end); 
      ...         
   end // if lFlexRapDM.DesignerCustomOpenDoc