我在主窗口里面开辟了一个线程主要执行一个循环
while(flag) do
begin
   if (条件1) then
       form2,showmodal
   else if(条件2) do
       form3.showmodal;
end;当我满足条件1然后显示form2后,在form2里面设置了一个返回按钮(close;)关闭form2,然后程序回到了主界面,但是此时,整个主界面像是被enable=false了一样,按钮啊什么的都不能点击。
我在线程里面设置断点后,程序就会停下来,说明线程还在执行的。
请问为什么主窗口不能点击了呢?什么问题?

解决方案 »

  1.   

    抱歉刚才看错了
    你的代码while里面写一个application.processmessage
    另外
      

  2.   

    线程执行过程中没有空闲,相当于陷进了死循环,稍稍Sleep(100)一下,应该可以
      

  3.   


    控件是可以操作了,又出现新问题了。
    关闭主窗口的按钮中执行flag:=false。如果打开线程后,马上关闭主窗口,则没什么问题。
    可是只要子窗口showmodal过再返回的,就会出现如下错误:
    System Error Code 1400. 无效的窗口句柄。这又是什么原因呢?
    找不到问题啊,这个无效的窗口句柄 是子窗口的什么句柄之类的么?速救啊
      

  4.   

    对VCL的访问只能在主线程进行,所有与用户打交道的代码都只能在主线程执行,否则需要使用Synchronize方法,楼主操作form2的行为是在线程中进行的。
      

  5.   

    VCL只能在主线程中访问,子线程要用用Synchronize操作VCL.参考DELPHI的DEMO.
      

  6.   


    我想如果串口收到 数据为1 则打开子窗口1操作,收到数据为2 则打开子窗口2操作,
    这样除了这个方法“VCL只能在主线程中访问,子线程要用用Synchronize操作VCL.参考DELPHI的DEMO”,真的没有可解决的方法吗?在线程里面给一个edit赋值都显示不是很正常。这样在线程里面要操作控件该怎么办呀。能从线程中暂停下,跑到主线程执行完再回来吗
      

  7.   

    最后根据
    http://topic.csdn.net/t/20020721/22/891559.html
    解决了,非常感谢,长见识了,谢谢。