.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的添加删除
...........................
}
}
以上是我的一些粗拙的处理,如果博友们有更好的方法请指点