Уведомлять об изменениях в файле XML - PullRequest
0 голосов
/ 01 октября 2009

Я создал эту простую текстовую программу в WPF / VB.NET 2008, которая автоматически сохраняет содержимое форм в файл XML при каждом нажатии клавиши.

Теперь я пытаюсь заставить программу видеть изменения в XML-файле в реальном времени. Например, если я открою два моих текстовых планшета, когда я пишу на первом, он автоматически отразится на другом текстовом блоке. ,

Как я могу это сделать?

Один из моих коллег сказал мне прочитать о iNotifyPropertyChanged (что я и сделал), но как я могу применить его к моему приложению ..?

:( help ~

Кстати, я получил идею из демонстрации Google Wave, и я на самом деле пытаюсь сделать что-то большее ..

Ответы [ 4 ]

1 голос
/ 01 октября 2009

Примечание. Этот подход будет очень дорогим с точки зрения дискового ввода-вывода, использования памяти и процессорного времени. Почему вы используете XML, это тот родной формат данных, которые вы редактируете? Возможно, вы захотите взглянуть на более компактный формат - тот, который будет использовать меньше памяти, генерировать меньше операций ввода-вывода и использовать меньше ЦП.

Также обратите внимание, что вашему писателю может потребоваться очистить файл, чтобы наблюдатель заметил какие-либо изменения. Это также дорого - особенно если вы делаете это при каждом нажатии клавиши.

Обязательно используйте правильные атрибуты открытия файла (совместное использование, чтение и запись).

Возможно, вы захотите использовать совместно используемую память для связи между вашими процессами. Это будет дешевле. Вы можете избежать большого количества дисковых операций ввода-вывода, записывая изменения на диск, только когда пользователь просит их зафиксировать, или есть подсказка для этого. Я предлагаю избегать делать это при каждом нажатии клавиши.

Помните, ваше приложение должно быть хорошим системным пользователем и потреблять разумное количество системных ресурсов. Это особенно актуально при работе на нетбуках и других системах с «низкими характеристиками».

0 голосов
/ 01 октября 2009

Похоже, вы используете файловый ввод-вывод в качестве формы межпроцессного взаимодействия, если это так, IMO, вам нужно переосмыслить свой дизайн, особенно если вы делаете что-то «большее», чем волна Google (что-то большее, значит в этом контексте), как то, что вы предлагаете, ужасно неэффективно.

Проведите поиск по межпроцессному взаимодействию, и вы получите целую кучу идей @ foredecker (+1) о разделяемой памяти, например, хорошая возможность.

0 голосов
/ 01 октября 2009

INotifyPropertyChanged не будет работать для вашего приложения. Этот интерфейс используется, когда данные связывают некоторый элемент с объектом пользовательского интерфейса.

Лучше всего будет прикрепить FileSystemWatcher к файлу, когда вы откроете его для редактирования. Затем вы можете использовать события изменения, чтобы перезагрузить файл по мере необходимости в каждом экземпляре вашего приложения.

Также будут загружены изменения, сделанные из внешних редакторов.

0 голосов
/ 01 октября 2009

Вам, вероятно, потребуется использовать FileSystemWatcher для просмотра файла на диске, а не свойство в запущенном экземпляре приложения.

Или вы можете использовать несколько пользовательских сообщений, передаваемых между различными экземплярами вашего приложения.

...