在程序load的时候我把form上的datagrid的datasource设置成了一个全局的datatable,然后我做了一个socket的监听,在监听的过程中用到了线程,而在线程中接收socket的数据的时候就马上更改datatable,这样做便能使用form的datagrid产生数据上的变化。
    然而在使用频率不高的情况下,不会发生错误,但如果在接收频率高(如1秒/4次)的情况下就会立刻死机,cpu100%,且弹出错误(datagrip不能跟上datasource的速度导致),我把datasource去掉就正常了,而且设置断点看datatable的话也没有异常,这样应该如何解决。

解决方案 »

  1.   

    换成是text来接收数据就没有问题,但text对我来说没有用,我要的是datagrid,后来我用text的change事件来加字符进datagrid的datasource的时候就又出现同样的问题了,天呀,应该如何解决呢?
    在线程中又不可以掉用上级的对象,哎~~~~~~~~~。
      

  2.   

    是呀,对text的就没有问题,对datagrid.source就出问题了,后来我把thread.join(1000)后情况有所好转,但还是有同样的问题存在,不过就是好了一点而已。
      

  3.   

    这样的方式是错误的,你应该把网络的结果存放到存储区里,而你的UI线程(主线程)才对存储区进行读,网络与UI是生产-消费者的关系,两者用通告。
      

  4.   

    存储区是什么概念,我做了一个static的class用来存放datasource里面的数,但效果还是一样,我该怎么办.
      

  5.   

    就是要求有个同步噻。C++下面是WaitForSignleObject或WaitForMultipleObjects这些,C#下面也要类似的东西,这个不是很清楚。
      

  6.   

    Socket -->  DataTable
                  |
                  | Timer.Click (在Form中设一定时器)
                  V
                DataTable.Copy --> DataGrid.DataSource不知道这样能不能解决你的问题.
      

  7.   

    看来是你的线程对UI进行了处理,在别的线程中多UI进行处理要用BeginInvoke(delegate);到MSDN上看看用法,以前我也奇怪:为什么对button,lable这些控件在别的线程处理可以,而对dataGrid就异常呢?
      

  8.   

    还没有解决呀,加timer之后cpu资源狂占,效果不理想,难道就没有办法解决线程与datagrip之见的datasource问题了吗?
      

  9.   

    关注,并加入收藏。  DataGrid的加载 需要很多时间, 多线程处理是比较麻烦, 一直没有找到好办法! 看看各位高手怎么解决
      

  10.   

    用Town121(尘世)的方法稍微改了一下,勉强用着先吧,不过还是没有彻底解决问题.