有一个DataTable绑定到DataGridView
现在需要在多线种中操作DataTable(添加、删除或更新),然后重新绑定DataGridView目前用委托来更新,DataGridView经常成假死状态或更新结果没有预期高分求解决办法。

解决方案 »

  1.   

    线程操作控件必须用Invoke来操作(简单的吧05的线程安全那个功能关闭要出问题,尤其是平率高了)
    同时还有同步问题
    Moniter.Enter();//这句话插在操作控件之前,作用是让线程以队列方式调用以后的代码,也就是防止死锁
    在操作之前调用
    防止死锁
      

  2.   

    Thread Safety 
    This type is safe for multithreaded read operations. You must synchronize any write operations. 
    http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx
      

  3.   

    backgroundWorker吧,有现成的,何必自己弄委托呢,那样会带来新的麻烦的
      

  4.   

    去参照帮助“多线城安全调用WINDOWS窗体控件”,有2中安全的方法调用。。
      

  5.   

    数据量大的话使用绑定效果不好,最好做成按需要更新,只更新需要更新的item
      

  6.   

    搂主要知道,你这个多线程中的委托就是委托给应用程序主线程来执行DataGridView更新操作,
    而搂主的耗时操作,也正是这个DataGridView更新操作,所以没有达到多线程的效果,因为耗时的
    操作仍然是主线程完成的,导致主线程处于假死状态。搂主不妨使用使用微软不提倡使用的方法:Control.CheckForIllegalCrossThreadCalls = false;
    同时把更新DataGridView的操作也放回多线程中去。为防止出现UI资源共享冲突,搂主需要在执行更新DataGridView之前,使用lock方法锁定DataGridView