当在数据量比较大的情况下,在循环过程中,应用程序出现无法响应,怎么解决?不知道大家明白我的意思否
解决方案 »
- 有关Delphi7的TIdTCPServer和GPRS通信的问题,急!!!!!!!!!!!!!!!!
- 请求指点在分布式(ADO + TSocketConnection)中客户端程序和服务端程序经常出现没响应,先谢谢大家了!!!!
- 16进制字符串转化成10进制数的问题
- 有偿解决问题(支付人民币)精通COM的请进
- 如何连接远程数据库?
- listbox的数据添加问题?
- 如何对DBGRID中某个数据进行操作?
- 这里的代码哪里出错
- 看到别人的代码我总是很羡慕,总觉得看起来很舒服,我的总是些垃圾样,提提意见,看我的结症在那里
- 紧急求救:如何修复坏掉的paradox表?
- 如何调用过程啊?
- 求教:用TOLEContainer打开Word文档后如何识别Word文档是否被改动啊?
begin
xxx
application.ProcessMessages;
dataset.next;
end;
现在用application.ProcessMessages能基本解决这个问题没有什么具体的代码,这种情况我是经常遇到,例如数据量大的时候,特别是写进EXCEL的时候,一个一个单元格的填充,更加明显。不知道大家还有什么好办法来处理的。
要是性能有要求,就放线程里去
http://www.ttjcw.net/html/bianchengkaifa/Delphijiaocheng/8070.html
或许有帮助
unit Unit2;
interface
uses
Classes;
type
mythread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;
implementation
{ Important: Methods and properties of objects in VCL or CLX can only be used
in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure mythread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
{ mythread }
procedure mythread.Execute;
begin
{ Place thread code here } //这里就是加入程序代码的地方了
end;
end.
其中,你注意找到procedure mythread.execute;,应找到了吧,连我都看到了,这就是你刚才建立的线程了,那么接下来,我们要做的就是加入后台执行的代码,代码要加在那里?不会吧,当然是加在
begin
//这里就是加入程序代码的地方了
end;
如果你要调用unit1上的控件,你可以在unit2上面的uses中加入unit1就行了,记住,在unit1里的implementation后面增加uses unit2,这样你就可在unit1中引用线程了,引用的方法很简单,就是mythread.Create(false);。OK 这就是delphi中的线程。
delphi的帮助有例子,demos文件夹里面也有demo程序
用application.ProcessMessages和线程的耗时差不多好像,大家怎么看?
肯定线程要好一点 他和你的主程序交替运行 不会有卡死的感觉
要我说:你不如写一个正在处理中的界面,用一个滚动条表示进度,自己模拟一下(1,2s左右),这期间你的窗体.Enable:=False; 这样的话既体面又解决了你的问题