Witam! Pisząc komunikator (klient-serwer) było wszystko dobrze, aż do dziś. Nie mogę uruchomić 2 klientów, bo ten drugi i każdy następny jest "...przestał działać". Dziś co dodałem do komunikatora (do serwera i do klienta) to zapisywanie logu do pliku. Czy to by mogło być powodem i dlaczego? Używam TextWriter'a. Tak to nic chyba nie zmieniałem poza tym. Acha dodam też, że tworzenie pliku (stream'y i TextWriter) robię w konstruktorze formy głównej i od razu zapisuje tam też, że aplikacja została uruchomiona. Może tu leży problem? I tu dodatkowe pytanie - lepiej takie rzeczy co mają być wykonywane na początku robić w konstruktorze czy onLoad formy?
0
0
Pewnie TextWriter rzuca wyjątek, że nie może otworzyć pliku do zapisu (i co tu się dziwić...).
- Dodaj obsługę wyjątków.
- Zablokuj możliwość uruchamiania więcej instancji aplikacji niż jedna albo tak ją przebuduj, żeby nie korzystały z tych samych zasobów.
- Ani w konstruktorze formy ani w onload, co ma forma do zapisu logów? O programowaniu obiektowym coś słyszał? Projektowaniu aplikacji? Oddzielaniu warstw?
0
Faktycznie... Jak zrobić żeby tylko jedną instancję, da się bez WinAPI?
O tych rzeczach jeszcze nic nie wiem, mógł byś przybliżyć jak to zrobić poprawnie? Tzn. o programowaniu obiektowym to wiem, ale co to ma do zasobów?
0
Angielski w szkole miałeś? Z google korzystać potrafisz?
prevent multiple instances C#
0
Niby działa, ale jednak nie. Funkcja zwracająca nazwę procesu się zgadza, mimo to druga funkcja do szukania procesów zwraca takich 0. Dlaczego tak się dzieje?
Kod:
System.Diagnostics.Process[] instances = System.Diagnostics.Process.GetProcessesByName(Application.ProductName + ".exe");
if (instances.Length > 1)
{
MessageBox.Show("Nie możesz uruchomić więcej niż jeden klient!", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.Exit();
}
W serwerze jest ciutkę inaczej, bo tam jest konsola, ale nazwę procesu dobrze zwraca.