Как уведомить UserControl, когда мой tcpListener анализирует ответ? - PullRequest
0 голосов
/ 19 января 2019

Я создаю базовое клиент-серверное приложение TCP с использованием C # и wpf.Я пытаюсь уведомить пользовательский элемент управления (кнопка в моем случае), когда клиент анализирует ответ от сервера.

Как я понимаю, мне нужно создать событие в моем классе TcpClient, которое будет запущенокогда ответ анализируется, и я должен прикрепить свою кнопку к этому событию и использовать Dispatcher.Invoke ().Но я не знаю, как это реализовать, и документ MSDN мне не помог.Я использую приведенные ниже примеры MSDN для сервера и клиента для "PoC": https://docs.microsoft.com/en-us/dotnet/framework/network-programming/asynchronous-client-socket-example

https://docs.microsoft.com/en-us/dotnet/framework/network-programming/asynchronous-server-socket-example

В моем главном окне есть кнопка "test_btn",Я хочу обновить содержимое кнопки до «Успех», когда я анализирую свой ответ от сервера.

Любая помощь будет принята,

Спасибо.

MainWindow.cs:

        public MainWindow()
    {
        InitializeComponent();

        Thread TcpThread = new Thread(new ThreadStart(AsynchronousClient.StartClient));
        TcpThread.Start();

    }

AsynchronousClient.cs:

        Receive(client);
        receiveDone.WaitOne();

        // Write the response to the console.  
        Console.WriteLine("Response received : {0}", response);
        if(response == "success)
        {
         // Update the button from the MainWindow
        }

1 Ответ

0 голосов
/ 20 января 2019

Я пришел, чтобы ответить сам.

Если это может кому-нибудь помочь:

Я добавил в свой MainWindow.cs:

public delegate void updateNetworkButtonDelegate(string message);
public void updateNetworkButton(string message)
{
    if (!test_btn.Dispatcher.CheckAccess())
    {
        test_btn.Dispatcher.Invoke(new updateNetworkButtonDelegate(updateNetworkButton), message);
    }
    else
    {
       test_btn.Content = message;
    }
}

}

Я изменил свой TcpClient, чтобы передать MainWindow в параметре:

 public static void StartClient(MainWindow mw)

, тогда я мог бы обновить свою кнопку с помощью:

mw.updateNetworkButton (response);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...