多线程操作xml引发异常
正由另一进程使用,因此该进程无法访问该文件求解决办法,已经困扰我一天的问题了
用System.IO.FileStream fs = new FileStream(Application.StartupPath + "/config.xml", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
允许文件共享这种方式也没法解决
用多线程操作时最后保存的时候就会报异常,
这个异常用try{}finally{}没法跳过,用了也会报异常
弄了一整天了还是没弄出个解决方案,头疼,求大家帮我解决一下,谢谢大家了 --------------------编程问答-------------------- 同时只能一个线程访问 --------------------编程问答-------------------- 无解? --------------------编程问答-------------------- 这个说明你的XML文件有别的进程的访问,所以你不能加载
请要确认你是不是有其他进程或线程在对它进行操作,如果没有,那你要确认你的上一次对它在程序中操作后是否关闭,就是调用了stream.close()函数!! --------------------编程问答-------------------- 每次加载后都用了dispose(),是多线程操作引发的,程序里用了一个线程池来循环执行一些对xml操作的代码 --------------------编程问答-------------------- 沉得好快 --------------------编程问答-------------------- 上次还没操作完就要操作下次? --------------------编程问答-------------------- 写完要stream.Flush() --------------------编程问答--------------------
设备是八路的,要同时记录八路设备操作后的各项状态,只要有一个状态值改了就得改xml里的属性 --------------------编程问答-------------------- 其他的进程带开了 没有关 你肯定用不了
除非等他关了你才可以用 --------------------编程问答-------------------- 把对访问XML的代码加锁 --------------------编程问答-------------------- flush知识清理内存吧! --------------------编程问答-------------------- 请问对xml文件的操作除了save还可以用别的方式保存吗? --------------------编程问答-------------------- 这个的确是可以。
lock()一下就好了 不知道是不是楼主的意思 --------------------编程问答-------------------- 你这边在处理XML时只能是单线程的
1种做法是将此部分LOCK掉,但这样的后果导致其他线程卡在LOCK这,导致性能下降很多。
另一种是将XML片段载入到一个静态的XMLDOCUMENT属性中,其他线程只对这个XMLDOCUMENT进行操作。 --------------------编程问答-------------------- 可以多线程先在内存里操作
每次操作用lock,最后再写入文件 --------------------编程问答-------------------- 记得
using(FileStream fs = new FileStream(...))
{
..
FileStream.Close();
} --------------------编程问答--------------------
这个方法没试过,lock用过不理想,能再说的详细点吗?是建立一个公共的XMLDOCUMENT程序的每个需要改变的东西都先存到这里,最后在线程的一个地方统一去执行save操作吗? --------------------编程问答-------------------- 、
是建立一个公共的XMLDOCUMENT程序的每个需要改变的东西都先存到这里,最后在线程的一个地方统一去执行save操作吗?
这个想法可行 --------------------编程问答-------------------- 如果要锁定方式
那就用Stream.Synchronized(fs);
--------------------编程问答-------------------- 没做过帮顶 --------------------编程问答-------------------- 把所有涉及到该文件读写的代码段,连同创建的都贴出来一起分析,至少不是楼主你贴的那段代码造成的。 --------------------编程问答-------------------- 线程锁的问题 --------------------编程问答-------------------- 用重写I/O技术。自己找下相关资料看。 --------------------编程问答-------------------- 对xml进行加锁把,使用lock吧 --------------------编程问答--------------------
试试 --------------------编程问答-------------------- 对xml的读写放到一个地方,然后加锁,避免多线程冲突。 --------------------编程问答-------------------- 这个问题我也碰到过,后来就解决了;
你把xml操作的都放在一个函数里,操作完后就把资源都给释放了;
同时加上线程同步锁,这样一次只有一个线程在操作xml文件,并且每次操作完就释放了资源,下次操作时就不会再冲突了
补充:.NET技术 , C#