两个程序A和B,我想让他们通过一个txt文件传值:
A 对某个目录进行 filesystemwatch,主要是create,然后B 在需要传值的时候在该目录建立一个txt文件,里面填上要传的内容。最后A 监测到文件创建,打开被创建的文件,读取内容。计划是这样的,但是实验的时候,B开始传值的时候,A报错了:由于其他线程拥有此对象,因此调用线程无法对其进行访问。
报错语句为:StreamReader objReader = new StreamReader(e.Name);
这个错误可以理解,于是我在A读取文件前加了句:Thread.Sleep(500); 计划让B当中的filestream.close()有足够的时间释放这个文件,但是照样报错。难道,B执行filestream.close()的时候不释放那个txt文件吗?不能读取文件内容的话,难道只能靠文件名来传值?谢谢大家!

解决方案 »

  1.   

    两个程序A和B,我想让他们通过一个txt文件传值:通过别的方式...Remoting,Socket 两个人去弄文件同步都是问题,
      

  2.   

    进程间通行最方便是通过消息:WM_COPYDATA
    wcf
    http://topic.csdn.net/u/20100902/20/b57258bd-7cc0-46eb-a393-db9982b13a01.html
      

  3.   


    500毫秒足够吗?如何得到的这个指标?我也不知道多长时间算是足够。比如你的机器现在忽然一瞬间慢了,那么原来与许400毫秒可以完成的工作这一瞬间需要1400毫秒才完成,肯定你的程序就出现bug了。这种情况,只能让用户面对偶尔才出现的bug叫苦不迭,因为开发人员肯定硬说自己已经sleep(500)了,拒绝修改程序。所以这是一个设计之服务意识的问题,而往往不是技术问题。意识正确了,最笨的解决方法其实也很简单。你可以在sleep(500)毫秒之后,尝试操作一次,如果发现不行,循环进行sleep(500),直到重复40次以后才真正抛出异常。
      

  4.   

    进程间通信有很多种,例如通过命名管道、tcp、msmq,甚至remoting、webservice等等,很多,在.net入门书中也不下10种最常介绍的方法。采取直截了当的方法,但是要避免动不动就是文件、数据库那类OA编程方式。
      

  5.   

    谢谢,用了wu大推荐的WM_COPYDATA,又方便又强大!动不动就文件、数据库还真成了我的不良习惯