典型的生产者,消费者问题用lock锁住对象
*****************************************************************************
欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码)
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
*****************************************************************************
欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码)
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
问题是在这个地方:
localhost.MyWebService myweb=new localhost.MyWebService("http://"+xmllist[i].ToString()+"/webxml/MyWebService.asmx");
_ds=myweb.SQLDB("sdf");
循环的时候会上一次创建的_ds覆盖掉,,这里应该怎么解决,,这里也能用lock吗?
这个不是在线程里,这是在一个按钮事件里
这样做感觉效率不高,最好是能一次性把所有的Webservices的数据都取回来
然后在采取新的线程作导入数据的处理。
这样能减少IO操作,提高效率。循环里面取数据的方式感觉不太合适。同时这样的模式感觉不太好,
因为你每次都是取的不同的DataSet,最好是不用这样的属性的模式。
可以声明一个委托,参数是一个DataSet。
线程可以调用这个委托,已取回来的DataSet作为参数,用来同步数据
假如全部取过来,那怎么来存储这14个dataset另外,不用属性模式,用委托的话,那应该怎么来实现,
我没有用过委托,,不是很清楚,还请菜菜能够指点指点,
还有,线程调用方法能不能参数,我测试N久,好象不行,还请各位在线的高手多多指点
你说的:"用一个类把你线程的东西封装起来,每一个线程就是一个新的实例,这样每一个类的dataset就不同了",,但是ExcuteImport()方法里Ds怎么取值正如caicai_45(菜菜)说的,循环取数据,然后新开一个子线程去导入数据.
Thread thd = new Thread( new ThreadStart(类名.ExcuteImport));//////<注释2>然后通过类的属性来获取返回值至于“类名.ExcuteImport”,你可以用arraylist.add(类名.ExcuteImport)来统一管理好这些实例的,以后就用
((类名.ExcuteImport)arraylist[n]).属性
来获取返回值
class1 abc = new class1()那么首先把abc的ds赋值,然后把abc加到arraylist中去,代码如:arraylist.add(abc)然后用((class1)arraylist[n]).ExcuteImport起线程
完成后用((class1)arraylist[n]).ds获取返回值由于N的不同,就造成了不同的DS不知道我理解得对不对