这问题难道没人能回答?!

Barbarian 2000-09-07 09:31:00
通常在长时间处理过程中,我们可以定期地调用Application.ProcessMessages来实现
界面刷新,但现在我遇到一个问题:在三层结构中,客户端程序依次调用异地DCOM服务器上的一系列函数,而这些函数的处理时间均比较长,我不知该如何处理客户端界面的刷新,在此特向各位大虾求教。
...全文
300 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tms2000 2000-09-13
  • 打赏
  • 举报
回复

old=Now;
Repeat
Application.ProcessMessages;
Until Now>Old+Num* 1/24/60/60
JGTM2000 2000-09-08
  • 打赏
  • 举报
回复
Sayhigh is all right. Use a UI thread to handle such situation. Be careful to match the threading model of the COM components you are calling, or you will get serious performance trouble.
c1005 2000-09-08
  • 打赏
  • 举报
回复
会不会使用COM 的 Callback 编程模式,如果会的话,可在应用服务器再将收到的data进行处理,即取出data中的每条记录,将记录的每个字段读出,作为参数传递给另一数据库服务器上的存储过程,然后执行存储过程时这段业务过程中加上相应调用回调方法,在回调方法应有Application.ProcessMessages语句,这样就可以将应用服务器的处理进度反馈给客户端,且Application.ProcessMessages语句的目的就是处理客户端界面的刷新。
Callback 编程方法就是在应用服务器上新增一个接口,在定义相应的方法,然后在客户端采用接口对象的方式实现此接口,例如:
客户端:
TClientCallback = class(TAutoIntfObject, IClientCallback(应用服务器上的接口))
protected
procedure Progress(param1: 类型); safecall;
end;
procedure TFrmClient.FormCreate(Sender: TObject);
var
typelib: ITypeLib;
begin
OleCheck(LoadRegTypeLib(LIBID_CallbackServer, 1, 0, 0, typelib));
FClientCallback := TClientCallback.Create(typelib, IClientCallback);
end;
procedure TFrmClient。BtnServerClient(Sender: TObject);
begin
MDCOMConnection1.AppServer.Refresh(FClientCallback);
end;

Server 端:
procedure TServer.Refresh(FClientCallback :OleVariant);
begin
OleVariant(IDispatch(FClientCallback)).Progress(参数);
...
end;
iforever 2000-09-08
  • 打赏
  • 举报
回复
我不知道你说的那些和客户端刷新有什么联系.

你做的这些事我也做过.

把你的刷新任务讲清楚些.

你的问题并没有讲清楚

是需要定期实时刷新速度太满.

还是手工刷新太慢
Barbarian 2000-09-07
  • 打赏
  • 举报
回复
很感激playpcgame和c1005两位的回答,但在DCOM server上执行Application.ProcessMessages的方法我也曾试过,好像只能处理服务器本身的刷新,对客户端的刷新却无能为力,至于将服务器端的函数分拆固然是个不错的主意,但对我却无多大意义,因为
我这里的具体处理流程是这样的:客户端从本地局域网上的数据库服务器上取得若干数据集,然后将每个数据集分别以data的形式发送给异地应用服务器,应用服务器再将收到的data进行处理,即取出data中的每条记录,将记录的每个字段读出,作为参数传递给另一数据库服务器上的存储过程,然后执行存储过程.这个流程如果一变,将给我增加很多工作量,因此不到万不得已是不会
去改变这基本流程的。
c1005 2000-09-07
  • 打赏
  • 举报
回复
你只需要在COM Server 上的方法中的相应的位置上加上Application.ProcessMessages;语句就能够如何处理客户端界面的刷新
playpcgame 2000-09-07
  • 打赏
  • 举报
回复
见服务器端的函数进行分拆,减少执行时间
playpcgame 2000-09-07
  • 打赏
  • 举报
回复
将服务器端的函数进行分拆,减少执行时间
Sayhigh 2000-09-07
  • 打赏
  • 举报
回复
用线程处理.

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧