2009-10-01 3 views
0

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

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

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

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

:(помощь ~

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

ответ

1

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

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

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

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

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

+0

Где я могу начать читать о «общей памяти» на VB.Net? Это звучит более «на дому» на C#, на котором у меня не так много опыта. – GaiusSensei

0

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

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

0

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

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

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

0

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

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