c# – 使用NetMQ.Msg.Put()的System.ArgumentNullException

我正在使用NetMQ进行进程间数据通信.

我在.Net 4.5上使用NuGet软件包版本3.3.2.2

我想从字符串创建一个简单的消息,并通过RequestSocket发送它.

我一直得到System.ArgumentNullException,尽管实例中的非实例在任何点都是null.

我自己的代码:

static void Main(string[] args)
{
    string exampleString = "hello, world";

    byte[] bytes = new byte[exampleString.Length * sizeof(char)];
    if (bytes == null)
    {
        return;
    }

    System.Buffer.BlockCopy(exampleString.ToCharArray(), 0, bytes, 0, bytes.Length);

    var clientMessage = new NetMQ.Msg();
    clientMessage.InitEmpty();

    if (!clientMessage.IsInitialised)
    {
        return;
    }

    clientMessage.Put(bytes, 0, bytes.Length); //throws exception!

}

最佳答案 当你调用Put it调用Buffer.BlockCopy(src,0,Data,i,len);

github

public void Put([CanBeNull] byte[] src, int i, int len)
{
    if (len == 0 || src == null)
        return;

    Buffer.BlockCopy(src, 0, Data, i, len);
}

此时Data为null,Buffer.BlockCopy抛出ArgumentNullException

尝试通过调用InitPool或InitGC来初始化它.

点赞