載入組態檔時發生錯誤: 由於另一個處理序正在使用檔案 'C:\Documents and Settings\Admin\Local Settings\Application Data\ShenZhen_Promise-Tech_CO\SmsFox.exe_Url_2asihpm34rzbkgg2lhpnfaqxgterfsak\3.5.1.0\user.config',所以無法存取該檔案。
上面的是抛出的错误,程序是调用端口设备发信息的,如果调用3个一下的端口就不会出错,当调用4个或以上的时候就会出这个错误,请给点提示!!!
错误应该很明显,就是临界资源使用冲突。
解决的办法很很简单:要么发现互斥则等待,要么优化资源的使用。
发现互斥等待是必须的,无论你怎么优化,都不可能100%满足。
但从你信息来看,三个线程的时候OK,4个就有这个错误,明显你的代码也有很大的优化空间,在不该占用资源的时候占用,在资源使用完后不及时释放。
如果还是不行,可能就需要你提供代码来分析了。
经过各位的分析,我感觉可能是两个线程同时使用到了资源导致的,在使用到该资源的地方加上 Monitor.Enter(this);Monitor.Exit(this);不知道可否解决这样的问题?
@冰封一夏:
也可以。
还有使用MUTEX这个类来实现进程间的互斥。
假如只是线程间互斥,也可以使用lock。
@笨笨蜗牛: 还是不行! Boot boot = new Boot(); if( boot.emailService)……在if的时候提示错误。
boot是一个config。
是不是所有的配置文件中范围选择“User”的都会去操作user。confi这个文件?还有就是当给配置文件写数据的时候,另外一个配置文件正好在读数据,这样是不是就会引发错误?不同的配置文件
@冰封一夏: 其实,我对APPLICATION和USER的研究几乎为0。
按照你的描述,你把配置修改为APPLICATION是否问题依然?
USER是针对用户吧?我不知道是针对单用户,还是说独占形式之类的。
APPLICATION应该就是全局的意思了。这样,USER可能就对应于一个SESSION。
@笨笨蜗牛: 试了下修改为application 但是配置字节就变成只读的了。刚才看了下application程序运行时是只读的。
@冰封一夏: 你是要修改app.config或者web.config吧?这个。。。建议你不要使用这个策略。
作为类似的config,如果真的要在程序里修改自身,那么应该有专门的管理程序来实现,而且也应该在业务上是专人专用才对。
按照你的要求,建议你额外配置一个CONFIG或普通的XML文档来实现类似数据的修改。
可能是程序中打开文件后未时关闭