首页 > 其他分享 >TUniGUIMainModule.EnableSynchronousOperations 属性

TUniGUIMainModule.EnableSynchronousOperations 属性

时间:2024-01-05 21:44:08浏览次数:26  
标签:TUniGUIMainModule begin end uniGUI 模式 EnableSynchronousOperations 属性 客户端

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

相关文章

  • 第7章 配置非关系型属性
    本章涵盖以三种方式配置EFCore专注于非关系属性定义数据库结构引入值转换器、阴影属性和支持字段决定哪种类型的配置在不同情况下最有效本章介绍配置EFCore的一般内容,但重点介绍如何配置实体类中的非关系属性;这些属性称为标量(Scalar)属性。第8章介绍如何配置关系属......
  • 不同窗体间修改对方控件属性
    在WinForms应用程序中,若要从TestForm修改Form1中控件的Text属性,你需要确保Form1的实例在TestForm中是可访问的。有几种方法可以实现这一点,最常见的方法是通过构造函数传递Form1的引用,或者使用公共属性或方法来设置。首先确保控件(在本例中为Button)在Form1中是可访问的,设置Modifie......
  • 如何将视频上传到可用于HTML5 <video> 标签的 'src' 属性的平台?
    要将视频上传到可用于HTML5<video>标签的'src'属性的平台,您需要遵循以下步骤:1.选择一个支持视频上传的平台,例如YouTube、Vimeo或自建服务器。2.注册并登录到所选平台。3.创建一个新的视频项目或上传您的视频文件。4.获取视频的嵌入代码或URL。这通常可以在平台的......
  • 手撕Vue-Router-添加全局$router属性
    前言经过上一篇文章的介绍,完成了初始化路由相关信息的内容,接下来我们需要将路由信息挂载到Vue实例上,这样我们就可以在Vue实例中使用路由信息了。简而言之就是给每一个Vue实例添加一个$router属性,这个属性就是我们在上一篇文章中创建的VueRouter实例。实现思路我们需要在Vue实例创建......
  • 无涯教程-jsoup - 设置属性
    下面的示例将HTML解析为Document对象后,使用addClass或removeClass方法来增加或删除class类方法。Documentdocument=Jsoup.parse(html);Elementlink=document.select("a").first();link.attr("href","www.yahoo.com");link.addClass("header"......
  • 无涯教程-jsoup - 提取属性
    以下示例将HTML解析为Document对象后,使用Elements方法来获取dom元素的属性。Documentdocument=Jsoup.parse(html);Elementlink=document.select("a").first();System.out.println("Href:"+link.attr("href"));元素对象代表dom元素,并提供了各种获取dom元素属性的方法。......
  • Spring学习记录之引入外部属性配置文件
    Spring学习记录之引入外部属性配置文件前言这篇文章是我第二次学习b站老杜的spring相关课程所进行的学习记录,算是对课程内容及笔记的二次整理,以自己的理解方式进行二次记录,其中理解可能存在错误,欢迎且接受各位大佬们的批评指正;关于本笔记,只是我对于相关知识遗忘时快速查阅了解......
  • 用python打开文件获取文件属性时,运行报错PermissionError: [Errno 13] Permission den
    一:概述在开发中我们经常会使用python程序去对物理主机平台上的文件进行操作,在这里说明一下,python中获取文件属性时,运行出现的错误。二:具体说明<1>获取文件属性的代码importos#创建一个临时目录temp_dir='temp'os.mkdir(temp_dir)#在临时目录中创建一个文件temp_file=o......
  • RestHighLevelClient脚本更新设置waitForCompletion属性
    UpdateByQueryRequest参数没有直接设置wait_for_completion的属性通过使用客户端封装的submitUpdateByQueryTask方法调用:TaskSubmissionResponsetaskSubmissionResponse=writeHighLevelClient.submitUpdateByQueryTask(request,RequestOptions.DEFAULT);publicfinalT......
  • 给数组循环遍历添加属性,数组数据打印出来实际已经添加了,但是页面数据并没有展示出来,该
    问题复述,即:在vue项目中中,会遇到修改完数据,但是视图却没有更新的情况问题原因:因为用某些方法修改完数据,vue框架是没办法监听到,无法做到数据响应式,导致数据实际修改了,但页面没展示出来     参考:https://blog.csdn.net/weixin_48998573/article/details/130620390......