开始:
            thread = new Thread(new ThreadStart(Start));
            thread.Priority = ThreadPriority.Highest;
            thread.Start();函数:
        public void Start()
        {            Cursor currentCursor = this.Cursor;
            //FtpWebResponse response = null;//Ftp服务器的回应(便是FTP返回的数据)
            try
            {                FtpWebRequest request = WebRequest.Create(label1.Text + text_Server.Text) as FtpWebRequest;//FTP服务器
                request.Credentials = new NetworkCredential(text_Username.Text, text_Password.Text);//FTP身份验证                request.Method = WebRequestMethods.Ftp.ListDirectory;//索取列表文件夹的命令                //response = (FtpWebResponse);//获取服务端响应的数据
                FillDirectoryList(request.GetResponse().GetResponseStream());//获取数据流,并传至、填充数据
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error FTP Client");
            }
            finally
            {
                //response.Close();
                if (thread != null)
                {
                    thread.Abort();
                    thread.Join();
                }
            }
        }红色区域 request.GetResponse().GetResponseStream() 一直无响应……可是不用线程,却可以执行。郁闷老·

解决方案 »

  1.   

    没有任何异常信息。你说奇不奇?
    FillDirectoryList(request.GetResponse().GetResponseStream());
    我测试过,这里除了问题,红色部分。
      

  2.   

    不要下面的内容,试试:finally
                {
                    //response.Close();
                    if (thread != null)
                    {
                        thread.Abort();
                        thread.Join();
                    }
                }
      

  3.   

    FillDirectoryList这里面的代码贴出来吧
      

  4.   

            private void FillDirectoryList(Stream stream)
            {
                StreamReader reader = new StreamReader(stream);
                string content = reader.ReadToEnd();
                list_Files.DataSource = content.Split('\n');//读取数据
                reader.Close();
            }这代码也会错误?!
      

  5.   

            private void FillDirectoryList(Stream stream)
            {
                StreamReader reader = new StreamReader(stream);
                string content = reader.ReadToEnd();
                list_Files.DataSource = content.Split('\n');//读取数据
                reader.Close();
            }FillDirectoryList(request.GetResponse().GetResponseStream()); 
    问题似乎是出在这里。
      

  6.   

    FillDirectoryList((request.GetResponse()).GetResponseStream()); 
    这样用试试
      

  7.   

    跨线程访问界面时会有问题的
    http://msdn.microsoft.com/zh-cn/library/3s8xdz5c.aspx
      

  8.   

    第一个:2005版本以后不能直接跨线程访问界面第二个:
    finally 
                { 
                    //response.Close(); 
                    if (thread != null) 
                    { 
                        thread.Abort(); 
                        thread.Join(); 
                    } 
                } 
    不需要thread.Abort(); 
                        thread.Join();
    abort并不能终止线程,如果线程阻塞将在thread.Join();的时候一直等待直到天荒地老
      

  9.   

    终于找到错误的地方!线程的问题……
    原因出在哪里呢?这个是不是BUG?问题出在FillDirectoryList的ListBox,当DataSource属性发生错误的时候,便复制为=null。可是这个错误,是“线程间操作无效: 从不是创建控件“*”的线程访问它。”网上关于此错误的说法随处可见,可是隐藏之深的错误竟然没有报告出来。汗死!正确代码。        Thread t = null;
            private void OnOpen(object sender, EventArgs e)
            {
                //FtpClient fc = new FtpClient(label1.Text + text_Server.Text, text_Username.Text, text_Password.Text);
                //FillDirectoryList(fc.GetDirectoryList());
                ThreadStart ts = delegate()
                {
                    GoConnect gc = new GoConnect(Start);
                    stBox1.Invoke(gc);//在此控件上执行执行线程
                };
                t = new Thread(ts);
                t.Start();
            }
            delegate void GoConnect();
            public void Start()
            {
               
                Cursor currentCursor = this.Cursor;
                FtpWebResponse response = null;//Ftp服务器的回应对象(便是FTP返回的数据)
                //try
                //{
                    FtpWebRequest request = WebRequest.Create(label1.Text + text_Server.Text) as FtpWebRequest;//FTP服务器
                    
                    request.Credentials = new NetworkCredential(text_Username.Text, text_Password.Text);//FTP身份验证                request.Method = WebRequestMethods.Ftp.ListDirectory;//索取列表文件夹的命令
                    
                    response = (FtpWebResponse)request.GetResponse();//获取服务端响应的数据
                    FillDirectoryList(response.GetResponseStream());//获取数据流,并传至、填充数据