我尝试用该库进行websocket调用:
使用WebSocketSharp;
代码在控制台中的工作方式如下:
public static void Main(string[] args)
{
using (var ws = new WebSocket("wss://stream.binance.com:9443/ws/bnbbtc@ticker"))
{
ws.OnMessage += (sender, e) =>
Console.WriteLine("Message received" + e.Data);
ws.OnError += (sender, e) =>
Console.WriteLine("Error: " + e.Message);
ws.Connect();
Console.ReadKey(true);
}
}
但是我无法在Winform应用程序中使用它。 我将如何正确设置以下代码?当我运行以下代码时,什么都没有发生。我在richTextBox中看不到任何文本。
private void button1_Click(object sender, EventArgs e)
{
new Thread(test).Start();
}
void test()
{
using (var ws = new WebSocket("wss://stream.binance.com:9443/ws/bnbbtc@ticker"))
{
ws.OnMessage += (sender, e) =>
Invoke((System.Windows.Forms.MethodInvoker)delegate { richTextBox1.Text = "Message: " + e.Data; });
ws.OnError += (sender, e) =>
Invoke((System.Windows.Forms.MethodInvoker)delegate { richTextBox1.Text = "Error: " + e.Message; });
ws.Connect();
}
}
答案 0 :(得分:1)
我的猜测是,如果调用未在ws.Connect()
上阻塞,则您的线程可能正在结束,并且套接字对象正在被处置。
在您的控制台示例中,您有Console.ReadKey(true);
会阻塞主线程
您可以尝试等待ManualResetEvent
private ManualResetEvent manualReset = new ManualResetEvent(false);
void test()
{
using (var ws = new WebSocket("wss://stream.binance.com:9443/ws/bnbbtc@ticker"))
{
ws.OnMessage += (sender, e) =>
Invoke((System.Windows.Forms.MethodInvoker)delegate { richTextBox1.Text = "Message: " + e.Data; });
ws.OnError += (sender, e) =>
Invoke((System.Windows.Forms.MethodInvoker)delegate { richTextBox1.Text = "Error: " + e.Message; });
ws.Connect();
manualReset.WaitOne();
}
}
void signalExit()
{
manualReset.Set();
}