Komunikacja pomiędzy dwiema aplikacjami WFA

0

Mam do zrealizowania jeden z kilku scenariuszy, z aplikacji A wywołuję aplikację B

System.Diagnostics.Process.Start("..\\B\\B.exe");

, która wykonuje operację dodawania 2 + 2 i wynik zapisuje na dysku w pliku.

Chcę, żeby aplikacja A zareagowała na to co robi aplikacja B. Chodzi o to, żeby wynik dodawania trafił do textboxa w aplikacji A. Do głowy przychodzą mi 3 scenariusze, podpowiedzcie, jak to się robi w rzeczywistości i czy moje pomysły są dobre:

  1. aplikacja A otwiera nowy wątek, a sama zostaje zawieszona, wątek obsługuje aplikację B, ta wykonuje co ma zrobić i zapisuje wynik w pliku wynik.txt, wątek się kończy i zamyka, aplikacja A się odwiesza i wczytuje plik wynik.txt, wpisuje wynik do textboxa.
  2. aplikacja A otwiera aplikację B za pomocą
System.Diagnostics.Process.Start

, jednak obie pracują równolegle, aplikacja B po zakończeniu pracy może odwołać się do textboxa i sama tam wpisać wynik
3) aplikacja A otwiera aplikację B za pomocą

System.Diagnostics.Process.Start

, jednak obie pracują równolegle, aplikacja B po zakończeniu daje znać aplikacji A, że już skończyła i wtedy apikacja A wczytuje plik wynik.txt i zapisuje wynik do textboxa

Czy któryś ze sposobów zaproponowanych przeze mnie ma sens? Może robi się to zupełnie inaczej? Czy mógłby ktoś od razu podzielić się gotowym kodem, jak rozwiązać mój problem?

0

Jeśli chodzi Ci konkretnie o wykrycie powstania/zmiany pliku na dysku, to zainteresuj się klasą FIleSystemWatcher: http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher%28v=vs.90%29.aspx

0

Dzięki za pomysł, przyjrzę się tej klasie.

@Azarien niestety, ale ta druga aplikacja musi działać na plikach i stąd pomyślałem o takim pomyśle, że aplikacja A blokuje się, odpala wątek B i dopóki on się nie zakończy to aplikacja A jest zawieszone.
Znalazłem taki kod w googlach:

0

Przepraszam, nie wkleiło mi się. Tutaj ten kod:

Thread thread = null;
                    lock (_sync)
                    {
                        thread = new Thread(Sending);
                    }
                    if (thread != null)
                    {
                        thread.Start();
                    }

Czy coś takiego mogłoby zostać wykorzystane, gdyby w Sending() umieścić moje uruchamianie aplikacji B?

1 użytkowników online, w tym zalogowanych: 0, gości: 1