StreamReader的ReadToEnd 阻塞问题有谁能解决吗?

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

7 个解决方案

#1


可以贴一点代码来看看先...

#2


在循环里流关闭了没   ,代码怎么写的啊

#3


  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;            
        }

#4


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

#5




启动一个 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 这个方法,就会出现假死,只能运行一次

#6


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

#7


有人懂吗?

#1


可以贴一点代码来看看先...

#2


在循环里流关闭了没   ,代码怎么写的啊

#3


  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;            
        }

#4


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

#5




启动一个 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 这个方法,就会出现假死,只能运行一次

#6


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

#7


有人懂吗?