using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;namespace background
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        const string PostUrl = "http://hnyzw.com";
       private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            postdata(sender as BackgroundWorker, e);
        }        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            textBox1.Text = e.UserState.ToString();
        }        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {        }
        void postdata(BackgroundWorker bwork, DoWorkEventArgs e)
        {
           
            string re = DoRquestHtml(PostUrl, "POST", "utf-8", "name=test");
            if (!string.IsNullOrEmpty(re))
                bwork.ReportProgress(0, re+"at:"+DateTime.Now.ToString());
            System.Threading.Thread.Sleep(20);
            postdata(bwork, e);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            backgroundWorker1.RunWorkerAsync();
            button1.Enabled = false;
        }        public string DoRquestHtml(string uri, string method, string encodestr, string postparamers)
        {
            HttpWebResponse result = null;
            Stream ReceiveStream = null;
            try
            {
                while (true)
                {
                    HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(uri);
                    wr.Method = method;
                    wr.Timeout = 10000;
                    wr.AllowWriteStreamBuffering = false;
                    //wr.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NETCLR 2.0.50727)";
                    wr.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10";                    Encoding encode = System.Text.Encoding.GetEncoding(encodestr);                    // System.Windows.Forms.MessageBox.Show(headers["Cookie"].ToString());
                    if (method == "POST" && postparamers != null)
                    {
                        wr.ContentType = "application/x-www-form-urlencoded";
                        byte[] bytes = encode.GetBytes(postparamers);
                        wr.ContentLength = bytes.Length;
                        Stream requestStream = wr.GetRequestStream();
                        requestStream.Write(bytes, 0, bytes.Length);
                        requestStream.Close();
                    }                    result = (HttpWebResponse)wr.GetResponse();
                    ReceiveStream = result.GetResponseStream();
                    StreamReader sr = new StreamReader(ReceiveStream, encode);
                    string data = sr.ReadToEnd();
                    sr.Close();
                    return data;                }
            }
            catch
            {                return null;
            }
            finally
            {
                if (result != null)
                    result.Close();
                if (ReceiveStream != null)
                    ReceiveStream.Close();            }
        }    }
}
程序运行一段时间,大楷一两个钟头,就出现“程序出现问题需要关闭”,是什么原因啊 ,望指点

解决方案 »

  1.   

    你的doWork中运行的具体处理程序是否有问题,
    void postdata(BackgroundWorker bwork, DoWorkEventArgs e)
            {
               
                string re = DoRquestHtml(PostUrl, "POST", "utf-8", "name=test");
                if (!string.IsNullOrEmpty(re))
                    bwork.ReportProgress(0, re+"at:"+DateTime.Now.ToString());
                System.Threading.Thread.Sleep(20);
                postdata(bwork, e);
            }在postdata里面无条件调用postdata自己,这个看上去会造成死循环。是否少了条件或者少了大括号。