直接上代码:public delegate void myInvoke();                           //声明委托private void Form_Login_Load(object sender, EventArgs e)
        {
                        try
            {
                Thread th = new Thread(new ThreadStart(DoAutoUpLoad));
                th.IsBackground = true;
                th.Start();
            }
            catch
            {            }
        }public void DoAutoUpLoad()
        {
            myInvoke i = new myInvoke(AutoUpLoad);
            this.BeginInvoke(i);
        }        public void AutoUpLoad()
为什么用了线程了。窗体还是会出现卡死的情况。?。如果我把那段代码给注释了。就不卡死了。。求解。

解决方案 »

  1.   

    请先分清楚  控件  和 thread
      

  2.   

       我这里因为要在线程里面调用窗体。。所以使用了invoke。。public void AutoUpLoad()这个是最终要调用的方法。。窗体加载的时候。我就开始执行线程。。线程里面执行我要运行的方法。不这么用。?。那样怎么用。?
      

  3.   

    。。因为public void AutoUpLoad()这个方法里面的东西。要跑一段时间。而这个方法是在窗体加载的时候运行的。必须是窗体加载的时候运行。。我要避免这段时间窗体卡死。就这情况了。。怎么避免。?
      

  4.   

    是不是AutoUpLoad()函數裏面的算法太過複雜
      

  5.   

    你把AutoUpLoad的内容都拷贝到DoAutoUpLoad里试试。原来的委托不要了。
      

  6.   

    如果是想加载一些费时间的操作的话,可以先把加载线程先sleep几秒,等主线程加载完在去加载
      

  7.   

    。。恩。获取应用程序本身的版本号。需要时间。。通过WebService获取服务器上的版本号又需要时间。加起来大概要20秒左右。郁闷了。。
      

  8.   

    我这个方法是判断需不需要进行程序更新。如果需要更新的话。我先好隐藏主窗体。。弹出更新窗体。所以我才用invoke。sleep的话。一样会把主窗体卡死。。我就纳闷了。不知道情况出现在那里。
      

  9.   

    从新创建一个新的线程,不能用主线程。Thread thread = new Thread(this.NewThread);
                            thread.Start(feature);private void NewThread(object parameter)
            {}
      

  10.   

     myInvoke i = new myInvoke(AutoUpLoad);你的委托AutoUpLoad中是不是有操作UI界面的代码,如果有那么卡是肯定的.
    Invoke是将线程调回到主线程(UI线程),这样就会卡了.
      

  11.   

    强烈建议使用委托要进行调用。如
    public delegate void MyInvoke(); 
     MyInvoke my;                          //声明委托
    private void Form_Login_Load(object sender, EventArgs e)
            {
                      }public void DoAutoUpLoad()
            {
                   my=new MyInvoke(AutoUpLoad);               my();
           }        public void AutoUpLoad();
    写的粗了一点反正基本是这个样子