日期:2014-05-18  浏览次数:20717 次

谁帮我解释一下这段代码???
private IPEndPoint ServerEndPoint = null; //定义网络端点
  private UdpClient UDP_Server = new UdpClient(); //创建网络服务,也就是UDP的Sockets
  private System.Threading.Thread thdUdp; //创建一个线程
  public delegate void DataArrivalEventHandler(byte[] Data, IPAddress Ip, int Port); //定义了一个托管方法
  public event DataArrivalEventHandler DataArrival; //通过托管理在控件中定义一个事件
  private string localHost = "127.0.0.1";
  [Browsable(true), Category("Local"), Description("本地IP地址")] //在“属性”窗口中显示localHost属性
  public string LocalHost
  {
  get { return localHost; }
  set { localHost = value; }
  }

  private int localPort = 11000;
  [Browsable(true), Category("Local"), Description("本地端口号")] //在“属性”窗口中显示localPort属性
  public int LocalPort
  {
  get { return localPort; }
  set { localPort = value; }
  }

  private bool active = false;
  [Browsable(true), Category("Local"), Description("激活监听")] //在“属性”窗口中显示active属性
  public bool Active
  {
  get { return active; }  
  set //该属性读取值
  { 
  active = value;
  if (active) //当值为True时
  {
  OpenSocket(); //打开监听
  }
  else
  {
  CloseSocket(); //关闭监听
  }
  }
  }
----------------------------------------------------------------
  public delegate void DataArrivalEventHandler(byte[] Data, IPAddress Ip, int Port); //定义了一个托管方法
  public event DataArrivalEventHandler DataArrival; //通过托管理在控件中定义一个事件
这二句是什么意思?用和不用托管方法有什么区别??


------解决方案--------------------
建议你去了解一下委托与事件(算是C#的一个难点)
msdn.microsoft.com/zh-cn/library/17sde2xt(VS.80).aspx 

举例:
想了解奥运得金牌情况:
方法1:(轮询)每天爬在电视机前看电视...
方法2:(委托)订购中国移动的手机通知,当有得到金牌时就发短信告诉你(调用你的方法).

说的不一定准确,希望对你有帮助.
------解决方案--------------------
看注释挺有个性,什么定义了一个托管方法,不就是一个委托吗,再定义这个委托的事件
DataArrivalEventHandler这个委托是BeginInvoke这个
方法传过去的最后一个参数然后被IAsyncResult这个接口封装了(好绕口)
dn.EndInvoke(ar);这个是结束异步操作如果有返回值就返回异步操作结果
有空可以看看微软的异步编程模型apm