delphi 用线程显示主线程窗口然后挂起自己就会假死。怎么解决?

下面是我的程序functionMyThreadFunc(P:pointer):Longint;stdcall;vari:integer;beginforI:=0tofor... 下面是我的程序
function MyThreadFunc(P:pointer):Longint;stdcall;
var
i:integer;
begin
for I := 0 to form1.listview1.Items.Count - 1 do
begin

With form1.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from main where 名字='''+form1.listview1.Items.Item[i].SubItems.Strings[1]+'''') ;
Open;
First;
if form1.ADOQuery1.eof then //如果数据库中没有当前的信息
Begin
form1.label1.Caption := '当前名字:'+form1.listview1.Items.Item[i].SubItems.Strings[1];
form1.panel1.Visible := true; //在panel1面板上修改相关资料并写入数据库
SuspendThread(form1.hThread);//程序运行到这一步就出现问题了,主线程仍然可以操作,响应鼠标事件,但是panel1就假死了
End;
end;
form1.getdirlist(form1.listview1.Items.Item[i].SubItems.Strings[1]);
end;

TerminateThread(form1.hThread,0); // 终止线程

end;
展开
 我来答
匿名_热心网友
2011-10-10 · TA获得超过719个赞
知道大有可为答主
回答量:3827
采纳率:0%
帮助的人:8400万
展开全部
var MyAccess: TAccessApplication;//要加入access FileName: WideString; //************************ var ADOConnection:TADOConnection; //这个语句一定要加入adoconnection控件 ,或者要加入uses adodb; ADOQuery:TADOQuery; temppath:string;//存放临时目录 tb:boolean;//检查文件是否存在 begin try //首先判断是否有这个数据库 tb:= fileexists(edit1.Text ); if tb then exit; //如果数据库存在就退出 MyAccess := TAccessApplication.Create(Self); // myaccess.CloseCurrentDatabase ;//close database engin FileName := edit1.Text ; //如果路径不存在,程序不会自动创建 MyAccess.NewCurrentDatabase(FileName); myaccess.CloseCurrentDatabase; MyAccess.Disconnect; MyAccess.Free; //以上建库完毕 ,下面开始创建表和字段
追问
你说的是什么啊,你知道我在问什么吗?
luckyso111
2011-09-28 · TA获得超过208个赞
知道大有可为答主
回答量:261
采纳率:0%
帮助的人:233万
展开全部
线程中不要直接访问主界面的控件..最好是用同步,搜索一下百度吧
追问
首先说一下,忘了给分了,不好意思,这次加上。
我对线程不是很明白,帮我改一下程序吧,辛苦了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式