首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我的tcpListener解析响应时,如何通知UserControl?

当我的tcpListener解析响应时,如何通知UserControl?
EN

Stack Overflow用户
提问于 2019-01-20 03:19:06
回答 1查看 39关注 0票数 0

我正在使用C#和wpf构建一个基本的TCP客户端/服务器应用程序。当客户端解析来自服务器的响应时,我试图通知一个用户控件(在我的例子中是一个按钮)。

据我所知,我必须在我的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

在我的MainWindow上,我有一个"test_btn“按钮。当我解析来自服务器的响应时,我希望将按钮的内容更新为“成功”。

任何帮助都会很感激,

谢谢。

MainWindow.cs:

代码语言:javascript
复制
        public MainWindow()
    {
        InitializeComponent();

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

    }

AsynchronousClient.cs:

代码语言:javascript
复制
        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
        }
EN

回答 1

Stack Overflow用户

发布于 2019-01-20 08:57:24

我自己来回答。

如果它能帮助某人:

我在我的MainWindow.cs中添加了:

代码语言:javascript
复制
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:

代码语言:javascript
复制
 public static void StartClient(MainWindow mw)

然后我可以用以下命令更新我的按钮:

Mw.updateNetworkButton(响应);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54270540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档