日期:2014-05-20  浏览次数:20812 次

请大侠帮我看看这个异常的问题 搞了很久 就到关键地步了 在线等
using System; 
using System.ComponentModel; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Text; 
using System.Net.Sockets; 
using System.Net; 
using System.Windows.Forms; 
using System.Threading; 
namespace WindowsFormsApplication2 

  public partial class Form1 : Form 
  { 
  IPEndPoint server = null; 
  UdpClient uc = null; 
  public Form1() 
  { 
  InitializeComponent(); 
  } 
  Thread thread1 = null; 
  private void Form1_Load(object sender, EventArgs e) 
  { 
  try 
  { 
  IPEndPoint iep = new IPEndPoint(IPAddress.Any, 1000); 
  IPAddress address = IPAddress.Parse("127.0.0.1"); 
  byte[] a=new byte[]{1,11}; 
  uc = new UdpClient(); 
  server = new IPEndPoint(address, 1000); 
  uc.Send(a,a.Length,server); 
  thread1 = new Thread(jieshou); 
  thread1.Start(); 

  } 
  catch 
  { 
  MessageBox.Show("sdf"); 
  } 
  } 
  public void jieshou() 
  { 
  while (true) 
  { 
  try 
  {  
  byte[] Data = uc.Receive(ref server); //将获取的远程消息转换成二进制 
  //throw new Exception("sdf");  
  } 
  catch 
  { MessageBox.Show("d"); } 
  } 
   
  }  
  } 



问题是当执行到 byte[] Data = uc.Receive(ref server);的时候会出现异常,然后抛出之后循环就停止了。当注释掉 byte[] Data = uc.Receive(ref server); 

改成 try 
  {  
  //byte[] Data = uc.Receive(ref server); //将获取的远程消息转换成二进制 
  throw new Exception("sdf");  
  } 
后就会不断的循环抛出,不会停止,为什么第一种执行一次就停止 第二种怎么异常都不停止呢? 
 
 
 

  


------解决方案--------------------
你怎么发了两个贴问这个。那我贴过来吧。

与这个语句有关 byte[] Data = uc.Receive(ref server); 

这个语句第一次执行时,抛出了异常,或许也清空了缓冲区,下一次执行时因为没有数据,所以也没有再抛出异常
------解决方案--------------------
另外,注意身体,深更半夜的也多少人回答问题
------解决方案--------------------
建议你在byte[] Data = uc.Receive(ref server); 语句处设断点,跟踪进去,看看到底运行到哪里出现的异常
------解决方案--------------------
这个语句第一次执行时,抛出了异常,或许也清空了缓冲区,下一次执行时因为没有数据,所以也没有再抛出异常

对于这句的理解,我还是不懂,我这个程序的作用是发送一个消息给自己,然后用那个异常进行监听消息,如果那个异常执行一次就停止的话,那就是说这样监听不了,所以我必须明白为什么它会执行一次异常就停止了,还有 要怎样情况下才会不异常 另外谢谢你的关心
------解决方案--------------------
How about make a job-managerment. catch exception and re-start the thread?