代码改变世界

.net cf下的线程同步

2007-12-10 17:08  cppguy  阅读(553)  评论(0编辑  收藏  举报

     开发中遇到这样的问题,有两个线程,它们有可能会同时对一个ListView进行添加删除,一开始,我并没有意识到这会产生冲突,不过调试了几次,总是会产生不可预知的错误。经过查阅资料,有下面所得。    

        线程的异步特性意味着必须协调对资源(如文件句柄,网络连接和内存)的访问。否则,两个或多个的线程可能在同一时间访问相同的资源。而每个线程都不知道其他线程的操作。结果将产生不可预知的数据损坏。

      解决方法之一: Lock关键字可以用来确保代码块完成运行,而不会被其他线程中端。这是通过在代码块运行期间为给定对象获取互斥锁来实现的。

       Lock语句以关键字Lock开头,它有一个作为参数的对象,在该参数的后面还有一个一次只能由一个线程执行的代码块。

     我解决的方法是:注:下面两个函数都同属一个控件类,都对共有的成员ListView1有添加删除操作

     private void RePlayData(int rowMin, int rowMax, DateTime time)
       {
           lock (this.listView1)
           {

              ..........................

             对ListView的添加删除

             ...........................
              }

       }

 

private void UpdateData()
       {

           lock (this.listView1)
           {

              ..........................

             对ListView的添加删除

             ...........................

                      }
       }

    以上是我的一些粗拙的处理,如果博友们有更好的方法请指点