c# - 防止来自服务器的响应覆盖旧响应
问题描述
目前我有一个有效的 WebSocket-Sharp 客户端,允许用户在 button_click 事件上发送请求。我还在富文本框(NTF 或 RSP)中收到来自服务器的响应。
Private void InstantiateWebSocket()
{
client=new WebSocket("ws://localhost:80");
client.OnMessage+=new EventHandler<MessageEventArgs>(client_OnMessage);
client.ConnectAsync();
}
和 OnMessage
private void client_OnMessage(object sender,MessageEventArgs e)
{
if(e.IsText)
{
Invoke(new MethodInvoker(delegate() richTextBox1.text=e.Data;}));
return;
}
}
我目前面临的问题是,每当客户端收到响应时,它都会覆盖旧响应。我希望将新的回复写在旧回复的下方
older response..
new line
newer response
解决方案
您需要附加现有的richTextBox1 文本:
richTextBox1.Text+=e.Data;
注意:如果您想稍后使用/处理这些响应,请将它们与时间戳一起存储在某个集合中。
添加一个私有字段,即
private ConcurrentBag<KeyValuePair<DateTime, string>> _messages = new ConcurrentBag<KeyValuePair<DateTime, string>>();
然后在收到的消息代码中执行此操作:
_messages.Add(new KeyValuePair<DateTime, string>(DateTime.Now, e.Data));
推荐阅读
- amazon-web-services - Terraform 创建用户池域时出错
- android - 如何显示具有固定高度的 TextField 的值
- html - 如何使用属性 value="true" 设置复选框的样式?
- angular - Mat-form-field 必须包含 MatFormFieldControl 错误,使用 *ngIf
- c++ - 在 C++ 中存储视图类型的引用变体
- ios - 将不同版本的 iOS 应用分发给不同的客户端
- r - 在 R 中手动计算熵
- amazon-web-services - 如何使用 CLI 在 AWS Amplify 中使用 REST API 添加自定义授权?
- javascript - 添加另一个减速器后 Redux configureStore 错误
- javascript - 多个“交叉点观察者”取消了“未观察”功能