新手花200分求答案,希望高手帮忙看看

lh9823 2003-04-15 12:07:49
当连不上数据库时,在ConnectionTimeout这段时间里我切换窗口,再切换回原来的程序窗口就无法接受消息 就是变成白色的框,如何解决这个问题。我已经将连数据库的工作放再后台线程执行了。但是还是无法解决这个问题。附部分代码
//线程执行部分代码
constructor TLinkThread.Create(const Link:string);
begin
strLink:=Link;
FreeOnTerminate := True;
inherited Create(False);
end;

procedure TLinkThread.DBLink;
begin
Synchronize(DoDBLink);
end;

procedure TLinkThread.DoDBLink;
begin
try
FrmAutoJob.ADODBbackup.ConnectionString:=strLink;
FrmAutoJob.ADODBbackup.Connected:=true;
FrmAutoJob.retu:=2;
except
on E: Exception do
begin
FrmAutoJob.retu:=1;
end;
end;
FrmAutoJob.ADODBbackup.Connected:=false;
end;

procedure TLinkThread.Execute;
begin
DBLink;
end;

{主程序执行部分代码 LoadFrm为连接数据库时的提示Form retu是主程序定义全局变量 整型}
LoadFrm:=TLoadFrm.Create(Application);
LoadFrm.Show;
LoadFrm.Update;
retu:=0;
TLinkThread.Create(gstrDBLink);
while retu=0 do
begin
Application.ProcessMessages ;
LoadFrm.Update ;
end; //在线程返回结果未出来时不运行下面的程序
if retu=1 then
begin
LoadFrm.Close;
Application.MessageBox('连接数据库失败,请重新配置参数','提示',MB_OK);
WindowState:=wsNormal;
CoolTrayIcon1.IconVisible:=false;
TabSheet5.Show;
end
else
LoadFrm.Close;
end;

还请各位高手赐教
...全文
23 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lh9823 2003-04-15
  • 打赏
  • 举报
回复
回 idilent(说错了别怪我) 不是因为死了 而是因为只要在ConnectionTimeout未到指定的时间就一直在做连接数据库这个工作 这段时间内 提示Form 无法接受消息 所以切换回来窗口无法重画.但是我奇怪的是因为我已经将连接数据库这个工作放在线程里执行了,照理应该是不会有这种现象的啊。同样在大量运算以及查询大量数据时也会产生这种现象的 我查过解决办法无非就是采用线程或者在运算过程里加Application.ProcessMessages ,使窗口可以接受其他消息。
idilent 2003-04-15
  • 打赏
  • 举报
回复
变成白色的框是不是因为程序死掉了造成的?
lh9823 2003-04-15
  • 打赏
  • 举报
回复
麻烦大家帮个忙吧
lh9823 2003-04-15
  • 打赏
  • 举报
回复
有人能帮我看看吗?

5,388

社区成员

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

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