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