Я пытаюсь сделать вызов веб-сокета с библиотекой:
с помощью 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();
}
}





Я предполагаю, что если вызов не блокируется 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();
}