【发布时间】:2023-04-07 18:15:01
【问题描述】:
我有一个 C# 类,它封装了一个 UDP 套接字,以便更轻松地接收和处理网络数据。
每当接收到数据时,都会触发一个事件,并将数据作为参数传递:
public event Action<byte[]> DataReceived = delegate(byte[] data) { };
我收到数据并像这样触发事件:
while (socket.IsBound)
{
var buffer = new byte[MaximumDataLength];
socket.Receive(buffer);
DataReceived(buffer);
}
我的理解是同一个数组实例被传递给每个事件处理程序。
如果其中一个处理程序修改后,这可能会导致问题 在其他处理程序开始处理它之前的数组?
如果是这样,有什么好的方法可以解决这个问题?
【问题讨论】:
-
传递数组的副本。
-
如何将数组的副本传递给每个事件处理程序?效率高吗?
-
我不知道你的情况,但这是 arr 的副本。
arr.ToArray()。在您的代码正常工作之前,效率不是您的主要问题。 -
是的,这会给我一个数组的副本,但是我如何给每个处理程序自己的副本?
-
我已经添加了用于触发事件的代码 - 但它与问题并不真正相关。
标签: c# arrays events event-handling