多线程操作xml引发异常

aspnet19851111 2009-11-04 04:49:07
正由另一进程使用,因此该进程无法访问该文件
求解决办法,已经困扰我一天的问题了
用System.IO.FileStream fs = new FileStream(Application.StartupPath + "/config.xml", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
允许文件共享这种方式也没法解决
用多线程操作时最后保存的时候就会报异常,
这个异常用try{}finally{}没法跳过,用了也会报异常
弄了一整天了还是没弄出个解决方案,头疼,求大家帮我解决一下,谢谢大家了
...全文
649 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
mbh0210 2009-11-05
  • 打赏
  • 举报
回复
对xml进行加锁把,使用lock吧
满衣兄 2009-11-05
  • 打赏
  • 举报
回复
用重写I/O技术。自己找下相关资料看。
vip__888 2009-11-05
  • 打赏
  • 举报
回复
线程锁的问题
nashina 2009-11-05
  • 打赏
  • 举报
回复
这个问题我也碰到过,后来就解决了;

你把xml操作的都放在一个函数里,操作完后就把资源都给释放了;

同时加上线程同步锁,这样一次只有一个线程在操作xml文件,并且每次操作完就释放了资源,下次操作时就不会再冲突了
卧_槽 2009-11-05
  • 打赏
  • 举报
回复
对xml的读写放到一个地方,然后加锁,避免多线程冲突。
VistaKobe 2009-11-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 fengjian_428 的回复:]
把对访问XML的代码加锁
[/Quote]

试试
qldsrx 2009-11-04
  • 打赏
  • 举报
回复
把所有涉及到该文件读写的代码段,连同创建的都贴出来一起分析,至少不是楼主你贴的那段代码造成的。
abcdef1111111 2009-11-04
  • 打赏
  • 举报
回复
没做过帮顶
sharpe 2009-11-04
  • 打赏
  • 举报
回复
如果要锁定方式
那就用Stream.Synchronized(fs);
aotian798 2009-11-04
  • 打赏
  • 举报
回复


是建立一个公共的XMLDOCUMENT程序的每个需要改变的东西都先存到这里,最后在线程的一个地方统一去执行save操作吗?
这个想法可行
aspnet19851111 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 viewstates 的回复:]
你这边在处理XML时只能是单线程的
1种做法是将此部分LOCK掉,但这样的后果导致其他线程卡在LOCK这,导致性能下降很多。
另一种是将XML片段载入到一个静态的XMLDOCUMENT属性中,其他线程只对这个XMLDOCUMENT进行操作。
[/Quote]
这个方法没试过,lock用过不理想,能再说的详细点吗?是建立一个公共的XMLDOCUMENT程序的每个需要改变的东西都先存到这里,最后在线程的一个地方统一去执行save操作吗?
flying_net 2009-11-04
  • 打赏
  • 举报
回复
记得
using(FileStream fs = new FileStream(...))
{
..

FileStream.Close();
}
ShinNakoruru 2009-11-04
  • 打赏
  • 举报
回复
可以多线程先在内存里操作
每次操作用lock,最后再写入文件
ViewStates 2009-11-04
  • 打赏
  • 举报
回复
你这边在处理XML时只能是单线程的
1种做法是将此部分LOCK掉,但这样的后果导致其他线程卡在LOCK这,导致性能下降很多。
另一种是将XML片段载入到一个静态的XMLDOCUMENT属性中,其他线程只对这个XMLDOCUMENT进行操作。
fihuang 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 fengjian_428 的回复:]
把对访问XML的代码加锁
[/Quote]这个的确是可以。
lock()一下就好了 不知道是不是楼主的意思
aspnet19851111 2009-11-04
  • 打赏
  • 举报
回复
请问对xml文件的操作除了save还可以用别的方式保存吗?
fihuang 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sharpe 的回复:]
写完要stream.Flush()
[/Quote]flush知识清理内存吧!
fengjian_428 2009-11-04
  • 打赏
  • 举报
回复
把对访问XML的代码加锁
fihuang 2009-11-04
  • 打赏
  • 举报
回复
其他的进程带开了 没有关 你肯定用不了
除非等他关了你才可以用
aspnet19851111 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fengjian_428 的回复:]
上次还没操作完就要操作下次?
[/Quote]
设备是八路的,要同时记录八路设备操作后的各项状态,只要有一个状态值改了就得改xml里的属性
加载更多回复(7)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧