public  delegate void ReadOverHandler(StringBuilder requestData);
        public  event ReadOverHandler ReadOver;
  private void ReadCallBack(IAsyncResult asyncResult)
        {
   ReadOver(myRequestState.requestData);
}这里ReadOver 老是为空,是什么原因啊?

解决方案 »

  1.   

    需要在其他地方注册该事件ReadOver+=new ReadOverHandler(test);  private void ReadCallBack(IAsyncResult asyncResult)
            {
    if(ReadOver!=null)
       ReadOver(myRequestState.requestData);
    }
      

  2.   

    我有注册事件的HttpWebRequest_BeginGetResponse rs = new HttpWebRequest_BeginGetResponse();
    rs.ReadOver += new HttpWebRequest_BeginGetResponse.ReadOverHandler(rs_ReadOver);
      

  3.   

    完整代码如下 public class HttpWebRequest_BeginGetResponse
        {
            public class RequestState
            {
                //   This   class   stores   the   State   of   the   request.
                const int BUFFER_SIZE = 1024;
                public System.Text.Encoder CharacterSet;
                public StringBuilder requestData;
                public byte[] BufferRead;
                public HttpWebRequest request;
                public HttpWebResponse response;
                public Stream streamResponse;
                public RequestState()
                {
                    BufferRead = new byte[BUFFER_SIZE];
                    requestData = new StringBuilder(" ");
                    request = null;
                    streamResponse = null;
                }
            }        public static ManualResetEvent allDone = new ManualResetEvent(false);
            const int BUFFER_SIZE = 1024;
            const int DefaultTimeout = 2 * 60 * 1000;   //   2   minutes   timeout        public  delegate void ReadOverHandler(StringBuilder requestData);
            public  event ReadOverHandler ReadOver;        public HttpWebRequest_BeginGetResponse()
            {        }        //   Abort   the   request   if   the   timer   fires.
            private void TimeoutCallback(object state, bool timedOut)
            {
                if (timedOut)
                {
                    HttpWebRequest request = state as HttpWebRequest;
                    if (request != null)
                    {
                        request.Abort();
                    }
                }
            }        public void GetData(string Url)
            {            try
                {
                    //   Create   a   HttpWebrequest   object   to   the   desired   URL.                  HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(Url);
                    /**
                        *   If   you   are   behind   a   firewall   and   you   do   not   have   your   browser   proxy   setup
                        *   you   need   to   use   the   following   proxy   creation   code.                        //   Create   a   proxy   object.
                            WebProxy   myProxy   =   new   WebProxy();                        //   Associate   a   new   Uri   object   to   the   _wProxy   object,   using   the   proxy   address
                            //   selected   by   the   user.
                            myProxy.Address   =   new   Uri( "http://myproxy ");
                 
                   
                            //   Finally,   initialize   the   Web   request   object   proxy   property   with   the   _wProxy
                            //   object.
                            myHttpWebRequest.Proxy=myProxy;
                        ***/                //   Create   an   instance   of   the   RequestState   and   assign   the   previous   myHttpWebRequest
                    //   object   to   it 's   request   field.    
                    RequestState myRequestState = new RequestState();
                    myRequestState.request = myHttpWebRequest;
                    //   Start   the   asynchronous   request.
                    IAsyncResult result =
                        (IAsyncResult)myHttpWebRequest.BeginGetResponse(new AsyncCallback(RespCallback), myRequestState);                //   this   line   impliments   the   timeout,   if   there   is   a   timeout,   the   callback   fires   and   the   request   becomes   aborted
                    ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), myHttpWebRequest, DefaultTimeout, true);                //   The   response   came   in   the   allowed   time.   The   work   processing   will   happen   in   the  
                    //   callback   function.
                    allDone.WaitOne();                //   Release   the   HttpWebResponse   resource.
                    myRequestState.response.Close();
                }
                catch (WebException e)
                {
                    //Console.WriteLine("\nMain   Exception   raised! ");
                    //Console.WriteLine("\nMessage:{0} ", e.Message);
                    //Console.WriteLine("\nStatus:{0} ", e.Status);
                    //Console.WriteLine("Press   any   key   to   continue.......... ");
                }
                catch (Exception e)
                {
                    //Console.WriteLine("\nMain   Exception   raised! ");
                    //Console.WriteLine("Source   :{0}   ", e.Source);
                    //Console.WriteLine("Message   :{0}   ", e.Message);
                    //Console.WriteLine("Press   any   key   to   continue.......... ");
                    Console.Read();
                }
            }
            private void RespCallback(IAsyncResult asynchronousResult)
            {
                try
                {
                    //   State   of   request   is   asynchronous.
                    RequestState myRequestState = (RequestState)asynchronousResult.AsyncState;
                    HttpWebRequest myHttpWebRequest = myRequestState.request;
                    myRequestState.response = (HttpWebResponse)myHttpWebRequest.EndGetResponse(asynchronousResult);                //   Read   the   response   into   a   Stream   object.
                    Stream responseStream = myRequestState.response.GetResponseStream();
                    myRequestState.streamResponse = responseStream;                //   Begin   the   Reading   of   the   contents   of   the   HTML   page   and   print   it   to   the   console.
                    IAsyncResult asynchronousInputRead = responseStream.BeginRead(myRequestState.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), myRequestState);
                    return;
                }
                catch (WebException e)
                {
                    //Console.WriteLine("\nRespCallback   Exception   raised! ");
                    //Console.WriteLine("\nMessage:{0} ", e.Message);
                    //Console.WriteLine("\nStatus:{0} ", e.Status);
                }
                allDone.Set();
            }
            private void ReadCallBack(IAsyncResult asyncResult)
            {
                try
                {                RequestState myRequestState = (RequestState)asyncResult.AsyncState;
                    Stream responseStream = myRequestState.streamResponse;
                    int read = responseStream.EndRead(asyncResult);
                    //   Read   the   HTML   page   and   then   print   it   to   the   console.
                    if (read > 0)
                    {                    myRequestState.requestData.Append(Encoding.UTF8.GetString(myRequestState.BufferRead, 0, read));                           IAsyncResult asynchronousResult = responseStream.BeginRead(myRequestState.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), myRequestState);
                        return;
                    }
                    else
                    {
                        //Console.WriteLine("\nThe   contents   of   the   Html   page   are   :   ");
                        if (myRequestState.requestData.Length > 1)
                        {
                            //string stringContent;
                            //stringContent = myRequestState.requestData.ToString();
                            //Console.WriteLine(stringContent);                        Model.Helper.BaiduMapsGeocoder b = (Model.Helper.BaiduMapsGeocoder)Common.Json.DeserializeObject(myRequestState.requestData.ToString(), typeof(Model.Helper.BaiduMapsGeocoder));                        //触发事件 
                            ReadOver(myRequestState.requestData);
                        }
                        //Console.WriteLine("Press   any   key   to   continue.......... ");
                        //Console.ReadLine();                    responseStream.Close();
                    }            }
                catch (WebException e)
                {
                    //Console.WriteLine("\nReadCallBack   Exception   raised! ");
                    //Console.WriteLine("\nMessage:{0} ", e.Message);
                    //Console.WriteLine("\nStatus:{0} ", e.Status);
                }
                allDone.Set();        }
        }
      

  4.   

    自带的那些空间 没有绑定event  为什么 可以运行啊?
      

  5.   


    自带的控件你一双击他就自动注册了,在designer.cs文件中。是个部分类。
    先注册了事件这里肯定不会报空错误啊
    //触发事件 
    if(ReadOver!=null)
    {
    ReadOver(myRequestState.requestData);
    }