我的程序启动后要去连接服务器,比较费时间。想在连接服务器之前启另外一个线程,显示出一个包含Label和ProcessBar的窗体。ProcessBar不需要主线程控制,但是主线程要控制Label的刷新,就是每当主线程处理到下一个步骤时,就在Label上提示当前执行到哪一步了。比如:开始连接服务器... -> 连接成功,开始取得数据... -> 取得成功,开始断开连接... -> 启动完成..... 然后关闭掉这个画面。能给一些例子吗,谢谢了

解决方案 »

  1.   

    方法:
    (1).把连接服务器的所有任务放到一个后台线程来完成。在Form_Load事件中启动这个线程并new一个显示你的消息和进度的窗体,并把主窗体先隐藏。
    (2).在上面启动线程在需要一个新的处理前显示消息并更新ProcessBar的进度,因为是后台线程,一定可以刷新消息窗体。
    (3).在上面线程结束时,关闭消息窗口并显示主窗体。
      

  2.   

    同意楼上的,但还是觉得该给楼主点“硬货”,给点代码吧。假设你开的显示进度的窗体为类myForm的对象,那么如下:
    1,在主线程里,加入下面的代码:
    myForm myfrm;
    private void LableChanged(string strMsg)
    {
      if(myfrm == null)
      {
        myfrm = new myForm();
        myfrm.GetChangeValue(strMsg);
        myfrm.Show();
      }
      else
      {
        myfrm.GetChangeValue(strMsg);
      }
    }
    在你每处理到下一个步骤的时候,就调用一次:
    LableChanged("进行到第x步了")。2,在myForm类里,加入下面的代码:
    public void GetChangeValue(string strMsg)
    {
      this.lable1.Text = strMsg;
    }上面这几行代码,可以做到:当你每进行到下一步骤调用LableChanged("进行到第x步了")时,
    你的消息窗体就会在lable上显示"进行到第x步了"。
      

  3.   


    和我现在处理的不一样。之前把连接服务器的操作都放在Main画面的UI线程里了,客户不满意,所以在原来基础上修改,想在Main画面另起一个线程显示一个Process画面。不知道我理解的对不对?
      

  4.   

    这个应该对您有帮助.
    http://szitr.com/bbs/viewthread.php?tid=320&page=1&extra=#pid724
      

  5.   

    这个应该对您有帮助.
    http://szitr.com/bbs/viewthread.php?tid=320&page=1&extra=#pid724