W C#, WPF, tworzę aplikację, która ma być włączona cały czas w tle. Po prostu pełni jakąś funkcję dla systemu. W związku z tym, aby zmienić ustawienia użytkownika dla tej aplikacji, stworzyłem osobny projekt/aplikację, właśnie do zmiany opcji (korzysta z serializacji, aby zapisać plik z opcjami). Tu pojawia się moje pytanie: Jak poinformować tą aplikację działającą w tle, że jej ustawienia zostały zmienione w aplikacji do zmiany opcji? I czy jest to na pewno dobry sposób na rozwiązanie problemu?
Najprościej będzie, gdy zmiana opcji będzie częścią aplikacji właściwej. Czy z jakiegoś powodu musi to być osobna aplikacja?
Czy ta aplikacja działa jako usługa? Bo jeżeli nie, to mogłaby mieć gui do ustawiania opcji.
Możesz też użyć named pipes :http://www.dijksterhuis.org/using-named-pipes-in-c-windows/
Jak dla mnie najprostszym rozwiązaniem tutaj jest użycie FileSystemWatcher: http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
Aplikacja jest aplikacją działającą w tle, nie ma okna. Włącza się przy starcie komputera i robi swoje łącząc się z bazą danych co jakiś czas.
to jaki problem dodać okno i chować ją do traya????
Serializacja i przesyłanie opcji z jednej aplikacji do drugiej to overkill. Jeśli aplikacja nie jest serwisem i działa w przestrzeni użytkownika to nie ma żadnych przeszkód dołożyć do niej okno. Synchronizacje trzeba upraszczać jak się tylko da.
Powinieneś użyć jednej aplikacji. Daj jej możliwość uruchamiania w różnych trybach (w zależności od parametrów wywołania). .NET do komunikacji międzyprocesowej oferuje muteksy, rurki (pipe) i sockety. Muteks nie wystarczy, socket aż za dużo. Przyda się rurka. Może pełnić zarówno funkcję strażnika (aby przeciwdziałać wielokrotnemu uruchamianiu aplikacji w tle) jak i do powiadamiania instancji głównej o żądaniu wyświetlenia okna opcji.
Tak to może wyglądać:
START
|
|
Utwórz NamedPipeServerStream (z ograniczeniem na jedną instancję)
| |
|SUKCES |JUŻ ISTNIEJE
| |
| Wywołano z parametrem ("pokaż opcje")?
| | |
| |NIE |TAK
| | |
| WYJDŹ Utwórz NamedPipeClientStream,
| połącz się z serwerem, wyślij
| przez rurkę wiadomość i WYJDŹ
Uruchom program w tle
i oczekuj na dane z rurki
|
|
Wywołano z parametrem ("pokaż opcje")?
| |
| NIE | TAK
| |
| Wyświetl okno opcji
| |
| |
| |
Po prostu działaj sobie w tle, jak pojawi
się coś na rurce - wyświetl okno opcji.