c# - 如何在 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' 需要对象引用”。
那么,我该怎么做呢?
解决方案
我弄清楚了这个问题。我只是在声明方法时删除了static
关键字,Received(ClientWebSocket)
现在我可以访问表单的标签了。我不知道为什么我复制/粘贴它的代码的作者使用了 static 关键字,但我很高兴它现在可以工作。
推荐阅读
- npm - 由于无法解析,无法启动会话存储(错误 500)
- c++ - 如何通过将矢量元素传递给函数来更改它们
- dataframe - 如何从 Pyspark 数据框列中选择一些行并将其添加到新数据框中?
- lua - How can I write simple Lua code for Logitech mouse?
- android - 如何在android中对其他应用程序执行触摸手势
- android - 删除卡片视图 - Firebaserecycleradapter
- java - setImageBitmap() 比 image.setImageDrawable()、image.setImageResource() 慢
- lua - 在 LUA 中调用 Rest api 端点
- docker - 使用 traefik 时 Web 应用程序无法在 swarm 模式下工作
- c++ - C++ 中的 C Mysql 驱动程序:仅获取字段(函数返回混合类型)