点button1按钮后
{
 new一个线程(调用ff方法)
 线程start ..........//这些是一堆操作,用时不定}ff方法
{
 new一个form//这个form有几个label和图片
 form.show()
 .......
}我想在主线程做一些费时操作时弹一个form出来,操作结束时此form自动消失,但子线程新建的form显示时form里面的label和图片都不显示,好像要等这个线程完了才显示,但线程完了这个form也就没了,该如何做才能在form一出现就显示里面的控件?
如果在form.show后面弹出个messagebox倒是可以,这是为啥?
最好有具体实现步骤,多谢!

解决方案 »

  1.   

    你本末倒置了,应该是先在子线程中执行费时的操作,在子线程开始运行但尚未结束前,主线程show一个新的窗口出来,提示后台在运行费时的操作,等子线程结束后,回调函数中将弹出的窗口关闭。
      

  2.   

    在绝大多数情况下,在后台线程中创建 Form 是应该避免的,Form 应该只存在于 UI 线程中,因为后台线程没有消息循环,因此 Form 的消息无法得到处理,因此看起来就是“死的”,无法显示界面、无法响应用户操作。MessageBox 显示的是模态对话框,它含有自己内部的消息循环过程,所以可以正常显示。正确做法是:点button1按钮后
    {
     new一个线程(调用ff方法)
     线程start new一个form//这个form有几个label和图片
     form.Show()    // 等待线程结束
     while(thread.IsBusy) Application.DoEvent();
     
      form.Close()}ff方法
    {
      ..........//这些是一堆操作,用时不定
    }
      

  3.   

    Form必需放在UI线程里,随便new出来的线程没有消息泵画面只会一闪而过。同上所说的。你应该在主窗体,Show一个窗体出来。在线程里通知窗体关闭。如果要ShowDialog,那么可以把线程交给子窗体去Start(),在子窗体里循环判断是否结束并关闭。
      

  4.   

    试试用backgroundworker单独后台线程处理