TUniGUIMainModule.EnableSynchronousOperations 属性
与所有其他Web应用服务器类似,uniGUI框架采用异步操作模式。在此模式下,请求由服务器处理,响应处理完毕后立即发送回客户端。例如,当用户按下客户端屏幕上的按钮时,就会生成 Ajax 请求,服务器将处理关联的OnButtonClick()事件。一旦事件被处理,结果将被发送回客户端,客户端将其呈现在客户端屏幕上。
在这种情况下,不可能像我们在本机桌面应用程序中那样实现阻塞模式视图。在 VCL 中,我们可以阻止代码执行,直到用户通过按下按钮发送反馈。
// 在 VCL 应用程序中,代码执行将被阻止,直到用户按下按钮。
if Form1.ShowModal = mrYes then
begin
// 在这里执行一些代码
end ;
该代码无法在经典的异步客户端/服务器操作模式下执行。话虽如此,uniGUI 为这个问题提供了一个解决方案,可以通过将 EnableSynchronousOperations 属性设置为 True 来启用该解决方案,但在我们讨论该主题之前,让我们看看如何在经典异步模式下解决这个问题。在异步模式下,服务器上的代码执行无法被阻塞,因为服务器需要在处理完请求后立即向客户端发送回复。为了解决这个问题uniGUI引入了Callback机制:
UniForm1.ShowModal(
procedure(Sender: TComponent; AResult: Integer)
begin
if AResult = mrYes then
begin
// 在此执行一些代码
end;
end
);
上面的示例消除了阻塞调用的需要,并在用户按下按钮时执行回调匿名方法。
uniGUI还支持同步操作。这种新模式是一个独特的功能,它使 uniGUI 进一步兼容标准 VCL 语法和预期行为。这将使将现有的旧 VCL 代码移植到 uniGUI 变得更加容易,因为您可以像在 VCL 中一样使用阻塞窗口和对话框。只需将EnableSynchronousOperations设置为 True 即可启用同步模式。之后,您可以在阻止模式下使用窗口和对话框:
if UniForm1.ShowModal = mrOK then
begin
// 在这里执行一些代码
end;
或者
if MessageDlg ('Test', mtConfirmation , mbYesNoCancel ) = mrYes then
begin
ShowMessage ('Yes');
end;
注意:请记住,不应在这些事件中调用阻塞模式窗口和对话框:
UniForm.OnCreate() UniForm.OnShow()
在这些事件中调用阻塞窗口可能会引发异常并产生不可预测的结果。
标签:TUniGUIMainModule,begin,end,uniGUI,模式,EnableSynchronousOperations,属性,客户端 From: https://www.cnblogs.com/qiao-fu/p/17948102