通知XML文件的更改

时间:2009-10-01 02:50:15

标签: vb.net inotifypropertychanged

我在WPF / VB.NET 2008中创建了这个简单的文本板程序,可以在每次按键时自动将表单内容保存到XML文件中。

现在,我正在尝试让程序实时查看XML文件的更改。例如,如果我打开两个textpad,当我在第一个上写时,它会自动反映在另一个textpad上。

我该怎么做?

我的一位同事告诉我阅读有关iNotifyPropertyChanged(我做过)的内容,但如何将其应用于我的应用程序..?

:(帮助〜

不过,我从Google Wave演示中得到了这个想法,而我实际上是想做更大的事情。

4 个答案:

答案 0 :(得分:1)

注意 - 就磁盘I / O,内存使用和CPU时间而言,这种方法确实非常昂贵。您为什么使用XML是您正在编辑的数据的本机格式?您可能希望查看更紧凑的格式 - 使用更少的内存,生成更少的I / O并使用更少的CPU。

另请注意,作者可能需要刷新文件以便观察者注意到任何更改。这也很昂贵 - 尤其是如果你在每次击键时都这么做的话。

请务必使用正确的文件打开属性(共享,读取和写入)。

您可能需要考虑使用共享内存在您的进程之间进行通信。这将更便宜。您可以通过仅在用户请求提交磁盘时将更改写入磁盘来避免大量磁盘I / O,或者提示这样做。我建议不要在每次击键时都这样做。

请记住,您的应用需要成为优秀的系统公民并消耗合理数量的系统资源。在上网本和其他“低规格”系统上运行尤其如此。

答案 1 :(得分:0)

您可能需要使用FileSystemWatcher来查看磁盘上的文件,而不是应用程序正在运行的实例中的属性。

或者您可以在应用程序的不同实例之间使用一些自定义消息传递。

答案 2 :(得分:0)

INotifyPropertyChanged不适用于您的应用程序。当数据将某个元素绑定到UI对象时,使用该interfaced。

最好的办法是在打开文件进行编辑时将FileSystemWatcher附加到文件中。然后,您可以根据需要在应用程序的每个实例中使用更改事件重新加载文件。

这也会加载外部编辑所做的更改。

答案 3 :(得分:0)

听起来你正在使用文件IO作为进程间通信的一种形式,如果是这样,IMO你需要重新考虑你的设计,特别是如果你正在做一些比google wave更大的东西(无论在这种情况下更大的意义)如何你提出的建议是非常缺乏的。

进行一些关于进程间通信的搜索,你会得到一大堆想法,@ foredecker的共享内存的想法(+1)是一个很好的可能性。例如。