Mam 2 pytania dotyczące programowania w C#
- Chciałbym zabezpieczyć program aby, jeżeli się go otworzy drugi raz, to wyświetli komunikat, że jest uruchomiony i się zamknie. Korzystam z mutexa. Jeżeli program uruchamia się, robię cośtakiego:
MessageBox.Show("Aplikacja jest już uruchomiona. Być może działa w trayu.", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.Exit();
No i komunikat pojawia się wtedy kiedy trzeba, tyle że Application.Exit() jest zupełnie ignorowane i program wykonuje siędalej. Próbowąłem umieścićto i w OnActivate formy i konstruktorze i zawsze to samo. Czemu aplikacja się nie zamyka?
- Aplikacja ma wysyłać komunikaty i zadania między komputerami. Nie wiem jak rozwiązać następujące problemy z wysyłaniem. Mój podstawowy kod wysyłania (jak będzie trzeba to podam też funkcje z wątków):
for(int i=0;i<hosty[0].Count;i++)
{
if (cbGrupaDocelowa.SelectedIndex == 0)
czy_wysłać = true;
else if (cbGrupaDocelowa.SelectedIndex == 1)
if (numery_hostów.Contains(i))
czy_wysłać = true;
if (hosty[1][i] == (string)cbGrupaDocelowa.SelectedItem)
czy_wysłać = true;
if (czy_wysłać)
{
lock (this)
{
TcpClient tcpClient = new TcpClient(hosty[2][i], ustawienia.port);
tcpClient.SendTimeout = 1;
tcpClient.ReceiveTimeout = 1;
NetworkStream ns = tcpClient.GetStream();
byte[] b = Encoding.UTF8.GetBytes("Otrzymano od: " + komunikat.od + " " + "Wysłano dnia: " + komunikat.kiedy_wysłano.ToString() + "\n\n" + komunikat.treść);
ns.Write(b, 0, b.Length);
tcpClient.Close();
//lista_wątków.Add(send);
czy_wysłać = false;
}
}
}
No i mam takie problemy:
-
Jeżeli np. poda się adres IP nieistniejącego hosta, to zanim pojawi się komunikat o błędzie mija bardzo dużo czasu i wtedy aplikacja się zawiesza. Próbowałem ustawić timeouty klienta TCP, ale to nic nie dało. Program ma działać w LANie więc nie potrzeba aż tak długiego okresu oczekiwania na odpowiedź. Jak to zmienić?
-
Wydaje się, że wysyła się tylko do 1 hosta. Próbowąłem na razie wysyłać komunikaty do siebie i jak dam listę z 2 własnymi adresami IP, to mam tylko 1 komunikat. Jak poprawnie zrobić wysyłanie do wielu?