开了一个线程在那边死循环接收数据,导致主程序都不能反应了,要自己释放线程控制权吗?线程不是按时间片跑的吗?

解决方案 »

  1.   

    Application.DoEvents(); 在循环里加
      

  2.   

    在每个循环里加上Thread.Sleep(0);
      

  3.   

    然后把你的线程的IsBackgroud属性设置为true
      

  4.   

    Thread.Sleep(1)要稍微好一点。0有的时候会不起作用
      

  5.   


    Thread.Sleep(0)是强制切换线程,当有线程在等待的时候,肯定是会起作用的。
    如果你sleep 1,就有可能会影响到执行的性能,按照lz要死循环的情况来看,好像实时性要求非常高,如果1毫秒的休眠,执行1000次就会有1秒的时间浪费了。
      

  6.   

    死循环而不做sleep,是因为当前的线程一直占用了cpu导致的,虽然操作系统会按时间片段去分配资源切换线程,但我做过一些测试,像界面类的主线程,似乎优先级好像没有新new的线程高。会有抢不到时间片段的可能性。所以后台线程不主动把cpu片段切出来的话,界面主线程就看上去像死了一样。