C cnmdwr Unregistered / Unconfirmed GUEST, unregistred user! 2002-10-23 #1 我正在编写一个多层应用,其中有一些数据处理的时间特别长(几分钟), 现在我希望能在客户端处于等待状态时显示一个动态的等待窗口,进度条显示, 请问应该怎样实现?
S szf Unregistered / Unconfirmed GUEST, unregistred user! 2002-10-24 #2 比较复杂的方法是使用多线程,在线程对象中调用ClientDataSet的DataRequest方法。 如果仅仅是显示一个会动的东西,就简单了。 定义TFlashForm动画窗体,上面有一个TAnimate 比如它的属性CommonAVI=aviCopyFile; 在DataRequest前创建并显示这个窗体(Show),调用Animate的Play方法 下面调用DataRequst方法 完了Free 掉FlashForm 在调用过程中,动画显示是正常的。 至于进度条,你自己找一个合适的AVI文件就行了。
比较复杂的方法是使用多线程,在线程对象中调用ClientDataSet的DataRequest方法。 如果仅仅是显示一个会动的东西,就简单了。 定义TFlashForm动画窗体,上面有一个TAnimate 比如它的属性CommonAVI=aviCopyFile; 在DataRequest前创建并显示这个窗体(Show),调用Animate的Play方法 下面调用DataRequst方法 完了Free 掉FlashForm 在调用过程中,动画显示是正常的。 至于进度条,你自己找一个合适的AVI文件就行了。
X xiaolinj79 Unregistered / Unconfirmed GUEST, unregistred user! 2002-10-24 #3 同意楼上的说法,建议使用多线程,其实很简单 只要在线程中调用datarequest,当数据处理完成后返回一个参数给显示等待窗口 然后再关闭窗口就ok了 以前在c/s结构下也是这么做的
A antic_ant Unregistered / Unconfirmed GUEST, unregistred user! 2002-10-24 #4 好象可以用异步方式可以,adotable我试了,不知道clientdataset如何
C cnmdwr Unregistered / Unconfirmed GUEST, unregistred user! 2002-10-25 #5 To szf: 我使用线程建立了一个等待窗口, 但是他不起作用,直到datarequest执行完成线程才开始执行 To xiaolinj79: 我在线程中使用datarequest方法是导致了我的scktsrvr出现AV错误, 然后clientdataset就不再往下执行了
To szf: 我使用线程建立了一个等待窗口, 但是他不起作用,直到datarequest执行完成线程才开始执行 To xiaolinj79: 我在线程中使用datarequest方法是导致了我的scktsrvr出现AV错误, 然后clientdataset就不再往下执行了
S szf Unregistered / Unconfirmed GUEST, unregistred user! 2002-10-25 #6 不是在线程建立等待窗口的。 线程操作界面元素是会被主线程锁定的,除非主线程空闲,所以当然是DataRequest执行完了, 线程的的界面才出来了。 因此正确的方法是在线程中调用DataRequest方法。不过带来的是怎么跟主界面同步的问题,也 就是界面的等待窗口要等线程执行完才往下跑。 另外,在线程中记得使用CoInitinize的方法,进行COM初始化。 听我的,用TAnimate动画组件吧,简单。
不是在线程建立等待窗口的。 线程操作界面元素是会被主线程锁定的,除非主线程空闲,所以当然是DataRequest执行完了, 线程的的界面才出来了。 因此正确的方法是在线程中调用DataRequest方法。不过带来的是怎么跟主界面同步的问题,也 就是界面的等待窗口要等线程执行完才往下跑。 另外,在线程中记得使用CoInitinize的方法,进行COM初始化。 听我的,用TAnimate动画组件吧,简单。