如果DataSnap服务器方法的执行时间比较长,这时候可能需要在客户端用进度条显示当前服务器方法的执行进度。要实现这种需求,现在可以利用DataSnap的回调功能,此功能是从Delphi 2010版本开始被引入的。

要实现回调,服务器方法需要暴露给客户端一个或多个类型为TDBXCallback的参数。例如:
...
{$METHODINFO ON}
TServerMethods1 = class(TComponent)
private
{ Private declarations }
public
{ Public declarations }
function LongTimeRunFunc(InitCallback, ProgCallback: TDBXCallback): boolean;
end;
{$METHODINFO OFF}
...
LongTimeRunFunc方法带有两个回调参数,InitCallback用来初始化客户端TProgressBar的设置,ProgCallback根据当前方法的执行进度,设置客户端TProgressBar.Position的属性。

implementation
...
function TServerMethods1.LongTimeRunFunc(InitCallback, ProgCallback: TDBXCallback): boolean;
var
Max: Integer;
I: Integer;
begin
Max := Random(120) + 1;
InitCallback.Execute(TJSONNumber.Create(Max)).Free;

for I := 0 to Max do
begin
ProgCallback.Execute(TJSONNumber.Create(I)).Free;
sleep(1000);
end;

Result := True;
end;
...
LongTimeRunFunc函数生成一个随机数,表示将执行的秒数。InitCallback和ProgCallback在execute时,将等待客户端执行完毕才继续。

而客户端这边的代码,需要申明两个继承自TDBXCallback(抽象类)的类,并且重载Execute方法,
...
TInitCallback = class(TDBXCallback)
function Execute(const Arg: TJSONValue): TJSONValue; override;
end;

TProgCallback = class(TDBXCallback)
function Execute(const Arg: TJSONValue): TJSONValue; override;
end;
...

implementation
...
function TProgCallback.Execute(const Arg: TJSONValue): TJSONValue;
begin
with Form2 do
begin
ProgressBar1.Position := TJSONNumber(Arg).AsInt;
btnStart.Enabled := (TJSONNumber(Arg).AsInt = ProgressBar1.Max);
end;
//刷新屏幕
Application.ProcessMessages;
Result := TJSONNull.Create;
end;

function TInitCallback.Execute(const Arg: TJSONValue): TJSONValue;
begin
with Form2 do
begin
ProgressBar1.Max := TJSONNumber(Arg).AsInt;
ProgressBar1.Step := 5;
Edit1.Text := '总时长:' + TJSONNumber(Arg).ToString + '秒';
btnStart.Enabled := False;
end;
Result := TJSONNull.Create;
end;

procedure TForm2.btnStartClick(Sender: TObject);
begin
ClientModule1.ServerMethods1Client.LongTimeRunFunc(InitCallback, ProgCallback);
end;

Initialization
InitCallback := TInitCallback.Create;
ProgCallback := TProgCallback.Create;
...

转载于:https://www.cnblogs.com/MaxWoods/archive/2011/09/23/2187832.html

利用DataSnap的回调功能在客户端显示服务器方法的执行进度相关推荐

  1. html显示任务进度,(原创)asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(二)...

    对上一次的做一点修改,增加一个比较美观的进度显示[@more@]对上一次的做一点修改,增加一个比较美观的进度显示 上面那个是运行中的画面,下面那个是结束后的画面 用到的图标在这里: 对上次的前台修改如 ...

  2. 组态王客户端显示服务器画面,组态王客户端显示服务器画面

    组态王客户端显示服务器画面 内容精选 换一换 GaussDB(DWS) 支持SSL认证方式的连接,以加密GaussDB(DWS) 客户端与数据库之间传输的数据.SSL连接方式的安全性高于普通模式,集群 ...

  3. qt客户端显示服务器发送的图片,qt客户端显示服务器发送的图片

    qt客户端显示服务器发送的图片 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. ...

  4. TCP客户端显示服务器图片,TCP客户端显示服务器图片

    TCP客户端显示服务器图片 内容精选 换一换 ELB的常见异常返回码有400.403.502.504等.若遇到这些返回码建议您先直接访问后端云服务器,查看是否是后端云服务器的异常.若后端云服务器响应正 ...

  5. 客户端显示服务器图片不显示,客户端请求服务器图片不显示

    客户端请求服务器图片不显示 内容精选 换一换 已成功登录鲲鹏代码迁移工具.只有管理员用户(portadmin)可以执行生成CSR文件.导入web服务器证书.重启和更换工作密钥的操作.普通用户只能查看w ...

  6. qt客户端显示服务器发送的图片,c++ - Qt客户端服务器应用程序“发送图像”出现问题 - 堆栈内存溢出...

    我正在尝试通过QDataStream从客户端向服务器发送图像( OpenCV Mat ). 第一项是int,即缓冲区的大小. 它可以处理10到15张图片,然后服务器读取第一个int随机数(通常〜2 ^ ...

  7. pubg国际版服务器没有响应,PUBG显示服务器没有正常执行 | 手游网游页游攻略大全...

    发布时间:2017-12-28 刷不出服务器怎么办?一些玩家遇到了不出现服务器的情况,下面就为大家介绍不显示服务器解决方法,一起来看看吧. 流放者柯南不显示服务器解决方法: 1.右上角打钩,再刷新,等 ...

  8. 金蝶客户端显示服务器不是有效的,金蝶 服务器不是有效的 请重新设置

    金蝶 服务器不是有效的 请重新设置 内容精选 换一换 Web服务端证书用于客户端浏览器和Web服务器之间的通讯,实现数据信息在客户端和Web服务器之间的加密传输,可以防止数据信息的泄露.为提高安全性, ...

  9. qt客户端显示服务器发送的图片不显示,使用Qt将一系列图片通过网络发送到客户端动态显示...

    <使用Qt将一系列图片通过网络发送到客户端动态显示>由会员分享,可在线阅读,更多相关<使用Qt将一系列图片通过网络发送到客户端动态显示(8页珍藏版)>请在人人文库网上搜索. 1 ...

最新文章

  1. 怎样找到适合自己的UI设计培训班
  2. JDK动态代理小例子
  3. 《C和指针》学习备忘
  4. 主板usb模式启动快捷键大全
  5. 工作39:注意传参和返回
  6. 【hackerrank】Week of Code 26
  7. 天工软件在正射项目中的应用与常见问题解答
  8. 现网问题排查实战:Jstat,Jstack,Jmap
  9. Windows XP pro with sp2(x64)VOL版(英文原版)光盘镜像 + 简繁中文语言包 + 有效安装密钥 一些网友都有这样的困惑,Windows XP sp3在安装
  10. linux 常用命令详解(文件处理命令,权限管理命令,文件搜索命令,帮助命令,用户管理命令,压缩解压命令,关机重启命令)
  11. 拿空间换时间的字典-Python基础前传(9)
  12. 和10位CIO,聊了聊他们今年的OKR
  13. 如何去除Html中超链接默认下划线
  14. 用HTML和CSS做箭头
  15. 如何在 Ubuntu 和其他 Linux 发行版中启动、停止和重启服务
  16. 玉米社:抖音作品几大核心指标,完播率、点赞率、吸粉率多少算好?
  17. Android 自动化测试Monkey、Monkeyrunner
  18. 【论文笔记】高维基因数据中的特征选择
  19. Windows:MULTIPROCESSOR CONFIGURATION NOT SUPPORTED蓝屏(32位(win10/LTSC 2019/LTSC 2021))
  20. 机器人教育在STEM课程中的设计研究

热门文章

  1. 不止有小米9 雷军还准备了支持无线充电的移动电源!
  2. 三星S10背板设计已确定:画面甚是感人
  3. redis密码设置、访问权限控制等安全设置
  4. 最好的休息,不是睡觉
  5. python模式匹配算法_【python算法书】单词模式匹配?
  6. 一个C++工程CPU占用100%问题的排查
  7. 嵌入式Linux入门12:编程规范
  8. GBK转unicode码查询表的改进
  9. 点阵字体显示系列补记:将字库文件转换成数组形式
  10. 【Arthas】Arthas classloader类加载器