一个有关winform调试的问题,运行到断点会卡1-2秒
当代码运行到断点 void client_ReceiveMsg(string _msg)的时候,程序就会卡住1-2秒,然后按F10直接跳出断点继续运行。不知道是什么原因
我是在做UDP数据传输,客户端接收到服务器给与的消息后触发事件,然后就卡..把断点加在事件中间也会执行到,仍然卡……

解决方案 »

  1.   

    没看明白意思
    设置断点就是让它卡
    另外 你用的Receive接受信息可能是同步的   没接收数据之前   会卡住
      

  2.   

    在高度模式下,.NET FrameWOrk需要做很多操作,计算。
    关键是步进,这个都会让程序执行变慢,这个很正常。
      

  3.   

    看样子是个异步调试的过程卡主应该也是正常的啊,有影响吗?但凡调试出现问题,一般把文件夹下所有的pdb文件删掉即可要不楼主把代码放出来看看
      

  4.   

    首先感谢各位的回答,可能说的不是很清楚
    加上断点后程序本身卡5秒左右,加断点的作用不是让它卡..是想观察一下程序运行的路线及值是否准确,卡住以后什么都做不了,按逐语句自己跳出了,另外程序运行结果基本上是正确的,但是弹出的窗口也会卡住..
    PageLoad内部执行
    client = new Client(IP地址, 端口号, 人员ID);
    client.ReceiveMsg += new Client.ReceiveMsgDel(client_ReceiveMsg);
    client.Start();void client_ReceiveMsg(string _msg)   --F9断点,进来就卡5秒.按F10退出调试
      

  5.   

    client_ReceiveMsg中是不是调用了UI控件,只有主线程(UI线程)才能调用UI控件,这是编程中很需要注意的。
    在你的程序中client_ReceiveMsg是不是被工作线程调用了,如果这样的话需要使用Invoke或BeginInvoke交给主线程调用,将client_ReceiveMsg修改一下:
    private void client_ReceiveMsg(string _msg)

      if (InvokeRequired)
      {
          BeginInvoke((MethodInvoker)(()=>client_ReceiveMsg(_msg)));
          return;
      }    
      // 原来的函数代码
    }
      
      

  6.   

    用另一种方式解决了,还是感谢大家的回答。
    解决方式:使用Application.idle事件替换自定义事件,监控Client类中的变量
    但是我还是对系统卡死的问题不明白,为什么会卡5秒,为什么断点会不继续走,为什么我给实例化Client类的方法单独开一个线程还是会卡。
    希望有经验人士帮助解答
      

  7.   

    Application.Idle是应用程序完成处理空闲时执行,也就是说造成事件卡住的原因可能是应用程序在执行其他操作,并没有空闲,与自定义事件之间有冲突造成程序卡住,断点结束