我正在使用C#WPF应用程序,该应用程序应该使用websocket连接并发送/接收一些数据包作为DATA ... 我在项目中使用了WebSocketSharp.dll并且一切正常,但在websocket事件中,例如ws.OnMessage,当我用一些字符串设置WPF标签时,它并没有改变任何东西。但MessageBox显示自己很好,在onOpen事件中,"已连接。" -string将以表格形式提交。
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();
}
}
}
有什么问题?因为我需要从收到的消息中读取一些数据并将它们放入表格中。
答案 0 :(得分:0)
WebSocket事件可能在非UI线程上引发,但WPF用户界面只能从UI线程更新。您可以使用Dispatcher来实现此目的。例如:
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);
}));
};