我有一个string[]数组A,还有一个DataGridView  DGV我要遍历A中的数据然后向comm1发数据,每发一条,comm1都会返回一些数据,我在comm1_DataReceived()方法里读取返回的值并判断是否有我需要的内容,如果有的话,就在DGV中显示出来,如果没有的话,就继续现在的问题是程序执行的过程中就假死了,看不到DGV变化的过程,程序就没响应了,到最后DGV直接显示出来整个的结果,我希望一条一条的显示出来,请问该怎么办呢?*************

解决方案 »

  1.   

    因为需要一些等待的时间,所以在程序里面放了sleep(100),是不是这个会引起假死啊?
      

  2.   

    “到最后DGV直接显示出来整个的结果,我希望一条一条的显示出来”,没有及时刷新的原因。
    多线程不熟悉的话,是比较麻烦的,因为会遇到跨线程刷新界面的问题,需要.InVoke(委托)。
    在串口收发数据时,给DGV赋值后,强制刷新DGV控件,就行了。
    刷新方法网上多,如:http://blog.sina.com.cn/s/blog_6dea7fdf0100qmol.html
      

  3.   

    只要你不把CPU时间占用完了,就不会假死;sleep(100)只有0.1秒
      

  4.   


    这个workshopAssistXDataSet的引用命名空间是???
      

  5.   

    每遍历一个都要sleep一下,整个程序就都假死掉了。
      

  6.   

    sleep(大于100),不妨碍你的串口通讯吧?那么,把这段时间用来更新你的DGV,不是很好吗?
      

  7.   

    我的程序写的有点儿乱,自己都看不过了反正sleep是挺多的是不是应该在收到数据的时候进行更新呢窗体呢。。??
      

  8.   

    参考
    C#多线程与UI响应 防界面假死
    http://csharpnet.5d6d.com/thread-170-1-1.html
      

  9.   

    DGV界面刷新是用重新绑定数据的方法,不是refresh():http://topic.csdn.net/u/20091011/10/edf264e4-4534-447e-b330-1c2ba60dcc51.html
      

  10.   


    userTableAdapter
    userBindingSource
    都是什么啊。
      

  11.   

    多线程比较常规.UI方面是主线程.  如果要处理数据就NEW个线程出来处理 网上代码很多找了一个:
    http://csharpnet.5d6d.com/thread-170-1-1.html
      

  12.   

    backgroundworker确实是个不错的选择,比在2003的时候好多了
      

  13.   

    防止c#程序假死的方法:有两种,一种是使用线程,
    还有一种是使用C#中的backgroundworker控件详细的请看我的博客LZ
      

  14.   

    还是用多线程吧, 实际上线程也没有你想象中的那么恐怖的!是在不行, 用多个Timer代替?