如何用多线程打开同一个窗体.(200分)

  • 主题发起人 九月天
  • 开始时间

九月天

Unregistered / Unconfirmed
GUEST, unregistred user!
目前采用CnPack的线程池制作个FTP软件,通常大家在用CuteFTP等软件,用多线程方式上转到服务器上时,如果出现同时有多个文件存在,系统会弹出窗口让你选择"覆盖","重命名","放弃"等,当选择完成后会继续弹出下一个窗体继续问你同样的内容。不知道这里是如何实现的?请教各位大大出出主意了。
目前多线程上传没什么问题,只是我也需要加入这样个判断过程,如果采用在线程中创建窗口并显示出来将会同时刷出多个窗口,这明显不是个好办法,如何让这些线程做到循环弹出窗口来询问操作呢?
不知道我所表达的内容是否清淅,还请各位指出。非常感谢!!!
 
这个窗口不能是全局的吗?
 
可以是全局的,我现在用SendMessage给主窗体发消息来打开,但还是会同时打开几个,如何做到不同时打开,也就是只要哪个线程打开这窗体,那么其它线程就处于等待中,当这个窗体关闭后再弹出,当然这个窗体关闭的话,告诉子线程PostThreadMessage相关信息.
 
刚才没说清楚,发同时打开几个时,只有一个能打开,其它会报错说不能创建等错误信息
我现在是新建一个窗口,然后用主窗体得到消息后去打开这个窗口.可能方法掌握不好,所以出错,请各位支招;
 
这个窗体在发消息之前就创建好,消息后showmodel应该不会多个的吧?不太清楚.
也可以判断提示窗体是否存在啊,如果不存在就发消息给主form打开,如存在就不发消息
 
是没错,这个窗体在发消息之前就创建好了,也是使用ShowModal方式。只不明白如何让多个线程不会同时去ShowModal这个窗体。
判断提示窗体是否存在我也用了,这要说明下,
1)窗体上的Caption文字是会变化的。
2)在主窗体onShow时我已创建出提示窗体。
如果才能做出比较好的判断呢? 还是用其它方法来实现。
 
frm: array[1..100] of TForm2;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=1 to 100do
begin
if frm=nil then
begin
Application.CreateForm(TForm2, frm);
frm.Caption:=inttostr(i);
frm.Show;
break;
end;
end;
end;

TForm2是先做好的一个要创建的窗体。
 
按功能说,多个其实是正常的,每个提示应该都创建并show线程自己的提示.把提示form变量定义在线程内就可以实现排队吧?
至于一定要显示一个,要不就提示后,就把所有线程都停下来,等待提示回复.
 
不用showmodel,用show应该不会报错
 
非常感谢,楼上两位,偶先去吃个饭,一会再来试试看。
 
凡界面操作,尽量不要放在线程里面
用消息来做吧
 
顶部