2009-10-01 86 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)是一個很好的例子。