C#通过循环来创建线程的几点疑问
时间:2011-12-14
来源:互联网
通过循环创建的线程发生了异常,不知如何解释,我的代码是这样的:
创建的线程类:
C# code
上面红色部分对象值偶尔会产生null值,如果只有一个线程的时候不会发生。
我是在线程方法里创建的VersionManage实例,也就是每个线程会对应自己的VersionManage对象,所以线程应该是相对独立的,然而发生这种异常的唯一可能就是当一个对象操作完VersionManage实例的CheckVersionmatch方法时,另一个对象操作也操作该实例的该方法(在同一内存处理),方法结束时方法内创建的对象生命周期结束,但是恰好另一个对象也在访问同一个实例的该方法并且刚好处理完红色部分的代码,本来应该有值,但由于被刚才那个释放掉了,所以导致了null值。但这又与我刚开始说的线程相对独立矛盾。麻烦各位高手给个解释
创建的线程类:
C# code
class ProcessFile { //省略部分代码 public void FileProcessThread() { //.........省略部分代码 //访问文件夹,获取文件列表并进行文件处理 for (int i = 0; i < folderinfoTable.Rows.Count;i++ ) { Thread proProcess = new Thread(new ParameterizedThreadStart(mcdprofileProcess)); proProcess.Start(folderinfoTable.Rows[i]); } } void mcdprofileProcess(object objdr) { VersionManage versionmanage = new VersionManage(localdbconnstr); //........ bool ismatch=versionmanage.CheckVersionmatch(mcdlocalfilelistforversion[0].FullName, mcdVersion); } } 线程方法调用的类: class VersionManage { //数据库连接 DBOperation dboperation; public VersionManage(string connectionstring) { dboperation = new DBOperation(connectionstring); } public bool CheckVersionmatch(string filepath,string VersionName) { //获取该版本类型的数量的sql语句 string getVernumstr = "SELECT COUNT(*) FROM(SELECT dbo.FILE_VERSION.Version_Name FROM dbo.FILE_VERSION GROUP BY Version_Name) AS temp WHERE temp.Version_Name='" + VersionName + "'"; [color=#FF0000] object vernumobj = dboperation.ExecuateScalar(getVernumstr);[/color] //.......................(省略) } }
上面红色部分对象值偶尔会产生null值,如果只有一个线程的时候不会发生。
我是在线程方法里创建的VersionManage实例,也就是每个线程会对应自己的VersionManage对象,所以线程应该是相对独立的,然而发生这种异常的唯一可能就是当一个对象操作完VersionManage实例的CheckVersionmatch方法时,另一个对象操作也操作该实例的该方法(在同一内存处理),方法结束时方法内创建的对象生命周期结束,但是恰好另一个对象也在访问同一个实例的该方法并且刚好处理完红色部分的代码,本来应该有值,但由于被刚才那个释放掉了,所以导致了null值。但这又与我刚开始说的线程相对独立矛盾。麻烦各位高手给个解释
作者: honghubird 发布时间: 2011-12-14
最后一行是问题的表现,但症结是什么,还没有解决,大哥们给解决一下把
作者: honghubird 发布时间: 2011-12-14
你要做什么
作者: Sandy945 发布时间: 2011-12-14
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28