有一段读xml的代码,但是会有几个Process同事操作,这样就会发生2个因为同时读到这个xml而发生错误。我已经加了一个锁了,在读xml之前先创建一个.lock的文件,其他Process如果读到这个.lock的文件,就先等待,但是这样,有时候还是会锁不住,有时2个Process还是会同时读到那个xml,有时2个Process还有可能因为同时创建了.lock而发生错误。(我也试过用一个静态的开关,去判断是否有Process正在读取xml,但是也还是会发生上述问题)有什么方法可以改进吗?或者还有没有其他的方法防止几个Process同时读取一个xml?

解决方案 »

  1.   

    或者用线程锁
    lock(*.Sync)
    {
    }
      

  2.   

    楼上的,人家是Process,不是Thread,
    1楼的正解
      

  3.   

    使用独占方式读取文件
    Stream = File.Open(Path , FileMode.Open , FileAccess.Read , FileShare.None)
    Xml.load(Stream)
    //Processing.....
    Stream.close();在Stream.CLose之前, 其它用户打开该文件都会失败.
      

  4.   

    FileShare.None,表示独占访问。或者用互斥体:System.Threading.Mutex
      

  5.   

    我不是要其他的Process读取失败,我是想让他们等一个Preocess读完了,再去读。
      

  6.   

    用Mutex锁
    Mutex m = new Mutex(false, "MyMutex");
    记住"MyMutex"这个值一定要唯一的。不要用默认的构造函数生成实例,那个不是跨进程锁。
      

  7.   

    做一个等待队列,根据process进来的先后来读,读完就发一个消息给等待队列,然后选择一个process来读
      

  8.   

    打开失败后是退出还是等待一会在读的决定权不是在你手里吗? 程序都是你写的, 完全可以做到打开失败后等一会再读的.失败了之后,不是就报错了嘛,怎么让其他Process等一段时间再去读?
      

  9.   

    使用错误捕获
    Try
    {}
    Catch{}
    MSDN里有详细的使用说明
      

  10.   

    zlc_168(zlc) ( ) 信誉:95  2006-07-20 14:37:00  得分: 0  
     
     
       楼上的,人家是Process,不是Thread,
    1楼的正解
      
     
    =======================
    Sorry,是我没认真看,是Process读文件。
      

  11.   

    使用错误捕获
    Try
    {}
    Catch{}
    MSDN里有详细的使用说明多谢,我基本上懂你的意思了^_^