0

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

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

我怎样才能做到这一点?

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

:(帮助~

顺便说一句,我从 Google Wave 演示中得到了这个想法,实际上我正在尝试做一些更大的事情。

4

4 回答 4

1

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

另请注意,您的编写者可能需要刷新文件以供观察者注意任何更改。这也很昂贵 - 特别是如果您在每次击键时都这样做。

确保使用正确的文件打开属性(共享、读取和写入)。

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

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

于 2009-10-01T03:02:09.983 回答
0

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

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

于 2009-10-01T02:54:00.497 回答
0

INotifyPropertyChanged 不适用于您的应用程序。在将某些元素数据绑定到 UI 对象时使用该接口。

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

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

于 2009-10-01T02:56:02.703 回答
0

听起来您正在使用文件 IO 作为进程间通信的一种形式,如果是这样,IMO 您需要重新考虑您的设计,特别是如果您正在做一些比 google wave(在这种情况下更大的意思)“更大”的事情。提议是非常低效的。

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

于 2009-10-01T03:29:30.033 回答