Добрый день! Помогите разобраться. Пишу Клиент - серверное приложение. Начал подключать юзеринтерфейс с помощью wpf.
Есть кнопка Connect, которая в зависимость от состояния подключения к серверной части имеет функционал отключения/подключения. Делаю это с помощью событий, отслеживая в классе client свойство connect.
После первого нажатия происходит подключение, после второго отключение. А вот на третьем и далее происходит удвоение. Т.е. цикл проверки состояния connect бежит по нескольку раз. Есть подозрение на удвоение подписки на событие. Но удаление, перед новым добавлением ничего не дает.
public MainWindow()
{
InitializeComponent();
client.ConnectionTrue += ChangeConnectionButtonTrue;
client.ConnectionFalse += ChangeConnectionButtonFalse;
}
private void ChangeConnectionButtonTrue()
{
ConnectionButton.Content = "Disconnect";
ConnectionButton.Click += ConnectionButton_Click_Disconnect;
}
private void ChangeConnectionButtonFalse()
{
ConnectionButton.Content = "Connect";
ConnectionButton.Click += ConnectionButton_Click;
}
private void ConnectionButton_Click(object sender, RoutedEventArgs e)
{
client.Connect();
if (client.Connected)
{
AutorizatTextBlock.Text = "Успешное подключение";
}
else AutorizatTextBlock.Text = "Сервер не доступен";
}
private void ConnectionButton_Click_Disconnect(object sender, RoutedEventArgs e)
{
client.Disconnect();
if (!client.Connected)
{
AutorizatTextBlock.Text = "Отключен";
}
else AutorizatTextBlock.Text = "Сервер не доступен";
}
}
class Client
{
const int port = 8888;
const string address = "127.0.0.1";
bool connected;
public NetworkStream stream;
TcpClient client;
public bool Connected
{
get { return connected; }
set {
if (connected != value)
{
connected = value;
if (Connected)
{
ConnectionTrue();
}
else
{
ConnectionFalse();
}
}
}
}
public void Connect ()
{
try
{
if (!Connected)
{
client = new TcpClient(address, port);
stream = client.GetStream();
Connected = true;
}
}
catch (Exception)
{
Connected = false;
}
}
public void Disconnect()
{
if (Connected)
{
stream.Close();//отключение потока
client.Close();//отключение клиента
Connected = false;
}
}
public delegate void ConnectionTrueHandler();
public event ConnectionTrueHandler ConnectionTrue;
public delegate void ConnectionFalseHandler();
public event ConnectionFalseHandler ConnectionFalse;
}
private void ChangeConnectionButtonTrue()
{
ConnectionButton.Content = "Disconnect";
ConnectionButton.Click -= ConnectionButton_Click;
ConnectionButton.Click += ConnectionButton_Click_Disconnect;
}
private void ChangeConnectionButtonFalse()
{
ConnectionButton.Content = "Connect";
ConnectionButton.Click -= ConnectionButton_Click_Disconnect;
ConnectionButton.Click += ConnectionButton_Click;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть файл БД с расширением SDBКак его подключить в Visual Studio и создать из не модель, для последующей полноценной работы через Linq
Этот вопрос исходит из этого вопросаМне не нравится что настройки, которые устраняют "замыленность" формы содержаться в app