2009-10-01 53 views
0

我在WPF/VB.NET 2008中创建了此简单的文本板程序,该程序在每次击键时自动将表单内容保存到XML文件中。在XML文件上通知更改

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

我该怎么做?

其中一位同事告诉我阅读iNotifyPropertyChanged(我曾经这样做),但是我怎样才能将它应用于我的应用程序..?

:(帮助〜

顺便说一句,我得到了来自谷歌Wave演示的想法,我确实想要做更大的事情..

回答

1

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

另请注意,作家可能需要刷新观察者的文件才能发现任何更改。这也很昂贵 - 特别是如果你在每次击键时重新做它。

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

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

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

+0

从哪里可以开始阅读关于VB.Net上的“共享内存”?这听起来更像C#的“家”,我没有那么多的经验.. – GaiusSensei 2009-10-01 04:03:51

0

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

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

0

INotifyPropertyChanged的是不会WO rk为您的应用程序。当数据绑定某个元素到UI对象时使用该接口。

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

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

0

听起来好像你正在使用文件IO作为进程间通信的一种形式,如果是这样的话,IMO你需要重新考虑你的设计,特别是如果你做的事情比谷歌更大(在这种情况下更大的手段)因为你提出的是非常不足的。

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