好吧,我正在处理一个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);
}));
};