我在TIndyTCPServer的Execute事件中用ReadBuffer读到数据后,创建一个窗体并显示这个窗体,显示后窗体被冻结,无法响应,不知道大家遇到过这种情况没有,是什么原因?以下是代码片断:procedure TfrmServers.serverExecute(AThread: TIdPeerThread);
var
CB: TCommBlock;
Client: PClient; frmRecv: TfrmRecv;
frmRecving: TfrmRecving;
begin
if not AThread.Terminated and AThread.Connection.Connected then
begin
AThread.Connection.ReadBuffer(CB,SizeOf(TCommBlock));
Client := PClient(AThread.Data); if (CB.Command = MT_QUERY) then
begin
frmRecv := TfrmRecv.Create(nil);
frmRecv.Client := Client;
frmRecv.DoQuery(CB);
frmRecv.Show;
//代码执行到这里以后,frmRecv显示出来,但被冻结,无法响应
end
else if (CB.Command = MT_DATA) then
begin
frmRecving := TfrmRecving(Client.FrmHdl);
frmRecving.DoData(CB);
end
else if (CB.Command = MT_END) then
begin
frmRecving := TfrmRecvingF(Client.FrmHdl);
frmRecving.DoEnd(CB);
end
else if (CB.Command = MT_ABORT) then
begin
frmRecving := TfrmRecving(Client.FrmHdl);
frmRecving.DoAbort(CB);
end;
end;
end;
var
CB: TCommBlock;
Client: PClient; frmRecv: TfrmRecv;
frmRecving: TfrmRecving;
begin
if not AThread.Terminated and AThread.Connection.Connected then
begin
AThread.Connection.ReadBuffer(CB,SizeOf(TCommBlock));
Client := PClient(AThread.Data); if (CB.Command = MT_QUERY) then
begin
frmRecv := TfrmRecv.Create(nil);
frmRecv.Client := Client;
frmRecv.DoQuery(CB);
frmRecv.Show;
//代码执行到这里以后,frmRecv显示出来,但被冻结,无法响应
end
else if (CB.Command = MT_DATA) then
begin
frmRecving := TfrmRecving(Client.FrmHdl);
frmRecving.DoData(CB);
end
else if (CB.Command = MT_END) then
begin
frmRecving := TfrmRecvingF(Client.FrmHdl);
frmRecving.DoEnd(CB);
end
else if (CB.Command = MT_ABORT) then
begin
frmRecving := TfrmRecving(Client.FrmHdl);
frmRecving.DoAbort(CB);
end;
end;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货