C# WebSocketSharp 事件不允许我更改 WPF 元素内容,如标签文本



好吧,我正在处理一个C#WPF应用程序,该应用程序应与WebSocket连接一起使用,然后发送/接收到一些数据包作为数据...我在项目中使用了WebSocketSharp.dll,一切正常,但是在WebSocket事件中,当我使用一些字符串设置WPF标签时,它不会更改任何内容。但是MessageBox显示自己很好,并且在Onopen事件中"连接" - 字符串将以表格提交。

namespace Kolbeh
{
    public partial class MainWindow : Window
    {
        WebSocket ws = new WebSocket("ws://192.168.1.34:9093");
        public MainWindow()
        {
            InitializeComponent();
            label1.Content = "connecting...";
            ws.OnClose += (sender, e) = >
            {
                label1.Content = "closed.";
            };
            ws.OnError += (sender, e) = >
            {
            };
            ws.OnMessage += (sender, e) = >
            {
                Messagebox.show("Ok");
                label1.Content = "Received a packet";
            };
            ws.OnOpen += (sender, e) = >
            {
                label1.Content = "Connected.";
            };
            ws.Connect();
        }
    }
}

有什么问题?因为我需要从接收到的消息中读取一些数据并将其列出。

Websocket事件可能在非UI线程上升高,但是WPF用户界面只能从UI线程中更新。您可以使用调度员来实现这一目标。例如:

ws.OnMessage += (sender, e) =>
    {
        Dispatcher.BeginInvoke(new Action(() => label1.Content = "Received a packet"));
    };

更新。您询问如何传递实际数据。据我了解,数据传递是e参数。您可以简单地在lambda中使用此变量:

ws.OnMessage += (sender, e) =>
    {
        Dispatcher.BeginInvoke(new Action(() => 
        {
            label1.Content = "Received a packet";
            DoSomethingWithData(e);
        }));
    };

最新更新