首页 > 解决方案 > 如何在 C# 中使用从 ClientWebSocket 接收的数据?

问题描述

这是一个 Windows 窗体应用程序,它使用 C# 中的 ClientWebSocket 从特定服务器流式传输数据。

我是 C# 新手,所以我只是从其他地方复制/粘贴有关如何连接和接收来自服务器的实时更新的代码。

这是处理接收数据过程的代码:

        static async Task Receive(ClientWebSocket socket)
        {
            var buffer = new ArraySegment<byte>(new byte[2048]);
            do
            {
                WebSocketReceiveResult result;
                using (var ms = new MemoryStream())
                {
                    do
                    {
                        result = await socket.ReceiveAsync(buffer, CancellationToken.None);
                        ms.Write(buffer.Array, buffer.Offset, result.Count);
                    } while (!result.EndOfMessage);

                    if (result.MessageType == WebSocketMessageType.Close) break;

                    ms.Seek(0, SeekOrigin.Begin);
                    using (var reader = new StreamReader(ms, Encoding.UTF8))
                    {
                        var receivedMsg = await reader.ReadToEndAsync();
                        StreamsPayload payload = JsonSerializer.Deserialize<StreamsPayload>(receivedMsg);
                        TickerStreamPayload data = payload.data;
                        Console.WriteLine(data.c);

                    }
                }
            } while (true);
        }

payload.data是一个 JSON 对象,我可以使用Console.WriteLine.

但是我的表单中有很多标签控件,我想将Text每个标签的属性填充到来自payload.data. 我似乎无法找到如何执行此操作的方法,因为我无法访问static async Rask Receive方法内的标签。

例如,我写:

TickerStreamPayload data = payload.data;
MyLabel.Text = data.c;

这不起作用,它说“非静态字段、方法或属性 'MainForm.MyLabel' 需要对象引用”。

那么,我该怎么做呢?

标签: c#clientwebsocket

解决方案


我弄清楚了这个问题。我只是在声明方法时删除了static关键字,Received(ClientWebSocket)现在我可以访问表单的标签了。我不知道为什么我复制/粘贴它的代码的作者使用了 static 关键字,但我很高兴它现在可以工作。


推荐阅读