Hallo,
folgendes Problem gilt es zu lösen:
Momentan probiere ich dass sich B über einen FilesystemWatcher updatet - wenn allerdings A anfängt die Meldungen sehr oft auszuspucken dann kommt der FilesystemWatcher mit seien Events nicht mehr hinterher und die TextBox aktualisiert sich mit grösserer Verzögerung. Mir ist klar dass bei dieser Geschwindigkeit kein Mensch die TextBox mitlesen kann; dennoch -> kennt vielleicht jemand andere/performatere Ansätze wie B Änderungen an dieser Textdatei mitkriegen kann?
Danke
Liegt die andere Anwendung auch in deinen Händen? Dann könnte diese eine Meldung an die auslesende Anwendung schicken.
Wie kann Application B möglichst zeitnah merken dass der Inhalt der Textdatei verändert wurde?
Wie wäre es mit einem Timer der alle 5 Sekunden die Textdatei auf ihre Grösse überprüft. Wenn diese grösser ist als beim letzten Check, dann schreibt er den Inhalt in die besagte Textbox.
Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt
Oder versuchs mal mit nem FileSystemWatcher
Kleines schnelles Beispiel gibts hier -> http://www.java2s.com/Code/CSharp/File-Stream/SetNotifyFilterofFileSystemWatcher.htm
Mehr Infos zum Gebrauch liefert dir die Msdn-Doku.
Grüße
Wie wäre es mit einem Timer der alle 5 Sekunden die Textdatei auf ihre Grösse überprüft. Wenn diese grösser ist als beim letzten Check, dann schreibt er den Inhalt in die besagte Textbox.
so bitte nciht... dafür gibt es den besagten filesystemwatcher....
Kann muss aber nicht, auch eine Lösung sein. Best Practices natürlich ausgeschlossen.
Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt
klar.. man kann auch per reflection.emit code einschleusen, das eine native dll generiert und compaliert, welche dann automatisch gestartet wirt, welches dann einen dienst erzeugt und registriert, welches dann alle 50 ms auf den ordner geht und die datei pollt um dann per remoting der ursprünglichen anwendung eine message zu schicken, damit diese weiß das sich etwas geändert hat.
-->
Kann muss aber nicht, auch eine Lösung sein. Best Practices natürlich ausgeschlossen.
deswegen würde ich es dennoch nciht machen.. nur weil es eine lösung ist. solchen gedankengut begegne ich in meinem jetzigen projekt leider vieeeel zu oft.... 😉
Momentan probiere ich dass sich B über einen FilesystemWatcher updatet - wenn allerdings A anfängt die Meldungen sehr oft auszuspucken dann kommt der FilesystemWatcher mit seien Events nicht mehr hinterher und die TextBox aktualisiert sich mit grösserer Verzögerung.
Wie wäre es, ein paar Events zu "sammeln"? Beim Auftreten eines Events wird ein Timer (neu) gestartet und wenn über 1-2 s keine Ereignisse mehr kommen (oder eben spätestens nach 2 s oder auch nach einer festgelegten Anzahl von Ereignissen) werden die Meldungen angezeigt.
und die TextBox aktualisiert sich mit grösserer Verzögerung
das allerdings liegt höchst wahrscheinlich nciht am filesystemwatcher sondern an deiner art der stringverkettung. siehe: [Artikel] Performant Strings verketten
Hallo Marsti,
ja beide Anwendungen sind von mir. Wie genau kann Anwendung A eine Nachricht an B schicken (wenigstens ein Stichwort) und wie schnell ist so etwas?
Oder versuchs mal mit nem FileSystemWatcher
Sorry aber du hast mein Post nicht (aufmerksam) gelesen - ich verwende bereits einen FileSystemWatcher 😦
Das:
klar.. man kann auch per reflection.emit code einschleusen, das eine native dll generiert und compaliert, welche dann automatisch gestartet wirt, welches dann einen dienst erzeugt und registriert, welches dann alle 50 ms auf den ordner geht und die datei pollt um dann per remoting der ursprünglichen anwendung eine message zu schicken, damit diese weiß das sich etwas geändert hat.
ist eine sehr interessante Idee 😃
und das:
das allerdings liegt höchst wahrscheinlich nciht am filesystemwatcher sondern an deiner art der stringverkettung.
eine gewagte Annahme 😄
Übrigens, die Verzögerung scheint durch die Bufferung des in A verwendenten TraceWriters zu entstehen - behoben durch das regelmäßige Aufrufen von Flush() 😛
Hallo yngwie,
wenn beide Anwendungen von dir sind, warum benutzt du dann eine Datei zur Kommunikation? Du könntest die Daten doch auch direkt von einer Anwendung zur anderen senden.
Aber wieder auch sei. Das Stichwort ist in beiden Fällen Interprozesskommunikation (IPC), egal ob du die Daten sendest oder nur die Mitteilung, dass neue Daten vorhanden sind.
herbivore
eine gewagte Annahme 😄
jain. ist eines der häufigsten fehlern bei der programmierung mit .net. ich habe einfach eine symptim mit der statischten häufung von fehlprogrammierung kombiniert.
wie dem auch sei... ich habe richtig vermutet, das es nciht am filesystemwatcher liegt 😃
remoting ist ein etwas spezifischeres stichwort 😉