需要往服务器上上传一个大文件,上传的时候窗体上的一个textBox里不停的显示“上传中…”,当上传完了以后再执行后面的代码。现在的问题是:
开一个线程用来上传,主程序用来在textBox中显示“上传中…”字样。
上传完成的时候主程序怎么知道上传完成了?这样主程序就可以执行下面的代码了。给个例子最好!谢谢了!

解决方案 »

  1.   

    如果传输的线程结束了,可以进行判断C# 中如何判断线程是否结束(转载 )
        为了测试获取网页源码,使用C#编写程序,为了最大限度的增加获取的次数,于是采用了多线程的方式,C#中很容易实现多线程,其实现方式与Java的实现方式基本一样,但是在功能上提供的方法更多一些。
        在编程的过程中,在主线程中启动了多个线程后,往往想等线程结束后再打印一些统计信息出来,但是可能先执行主线程中的打印语句,后面线程才能结束,这往往不是我们想要的。而如何判断线程执行是否结束呢?可喜的是微软提供了我们这样一个方法,IsAlive()其判断线程是否还在运行状态,所以我们可以在循环中一直判断这个标识,等该线程结束后,退出线程。而我们的程序在执行过程中,可能又要判断是否按下了停止按钮或停止键,按下后,会立刻终止线程,退出程序。所以在while循环中还要判断是否有键盘或鼠标消息,所以在循环判断中,还要处理这些消息,防止while(1)循环一直执行,不再响应消息。所以我们使用了几个BOOL变量,作为标志,通过这些标志,可以判断线程是否结束,是否按下了停止按钮。下面是C#中的相关代码,可以参考。
     
       private bool StartThreads()
            {
              
                bool IfTimesEnd = false;  
               
                IfRunOver = false;
             
         
                Thread newThread = new Thread(new ThreadStart(ThreadProc));
                newThread.Start();            while (!IfRunOver)
                {                        
                   
                    IfTimesEnd = newThread.IsAlive;
                    System.Windows.Forms.Application.DoEvents();
                    if (!IfTimesEnd || IfRunOver)
                    {
                        newThread.Interrupt();
                        newThread.Abort();
                        IfTimesEnd = false;
                        break;
                    }
                }
                return !IfTimesEnd; 
              
            }而主线程中的相关代码为:                    while (true)
                        {
                            IfTimesEnd = StartThreads();
                            IfThreadOver = IfTimesEnd && true;
                            System.Windows.Forms.Application.DoEvents();                        if (IfRunOver && IfThreadOver)
                            {
                                pt.Stop();
                                str = "用时:" + pt.Duration + " 秒\n";
                                richTextBox1.ScrollToCaret();
                                richTextBox1.AppendText(str);
                                richTextBox1.Update();
                                break;
                            }
                        }