在循环里面使用这个ReadToEnd 方法循环运行100次,读取多个不同网址,运行第一次就正常,第二次就会假死(第一次已经阻塞?),但如果我把ReadToEnd这个方法放到一个按钮里面运行,就是说
按一次,ReadToEnd方法就仅仅运行一次,再按一次按钮,也能正常运行多一次,难道ReadToEnd就不能放在循环或者一个线程里面循环多次反复运行?

解决方案 »

  1.   

      public class getSinaData
                {
                        public  string theUrl;
                        public Encoding encoding;
                        public  string html;
                     
                        public  void GetPage()
                        {                           HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create(theUrl);    //建立HttpWebRequest對象                            hwr.Timeout = 60000;                                                //定義服務器超時時間                  
                                HttpWebResponse hwrs = (HttpWebResponse)hwr.GetResponse();            //取得回應
                                Stream s = hwrs.GetResponseStream();                                //得到回應的流對象
                                StreamReader sr = new StreamReader(s, encoding);
                                html = (sr.ReadToEnd());
                                s.Close();
                                sr.Close();                         
                        }
                }
    ------------------------------------------------------ private void button13_Click_1(object sender, EventArgs e)
            {
                    getSinaData mydata = new getSinaData();
                    mydata.theUrl = textBox9.Text;
                    mydata.encoding = System.Text.Encoding.GetEncoding("GB2312");
                    Thread getIt = new Thread(new ThreadStart(mydata.GetPage));                getIt.Start();
                    getIt.Join();
                    richTextBox6.Text = mydata.html;            
            }
      

  2.   

    在按钮事件里面调用  StreamReader 的ReadToEnd 方法是完全没有问题,可以反复使用 
      

  3.   

    启动一个 backgroundWorker,然后在该线程里面有以下循环
    do
    {                                                         getSinaData mydata = new getSinaData();
            mydata.theUrl = wholeUrl;
            mydata.encoding = System.Text.Encoding.GetEncoding("GB2312");
            Thread getIt = new Thread(new ThreadStart(mydata.GetPage));        getIt.Start();
            getIt.Join();
            richTextBox6.Text = mydata.html;                                                            
     } while.....
    如果按照这种模式重复调用 ReadToEnd 这个方法,就会出现假死,只能运行一次
      

  4.   

    想到callback异步回调的方式
    代码还没写,呵呵