【问题标题】:System.ArgumentNullException with NetMQ.Msg.Put()System.ArgumentNullException 与 NetMQ.Msg.Put()
【发布时间】:2016-07-10 12:28:51
【问题描述】:


我正在使用 NetMQ 进行进程间数据通信。
我在 .Net 4.5 上使用 NuGet 包版本 3.3.2.2
我想从一个字符串创建一个简单的消息并通过RequestSocket 发送它。

我不断收到System.ArgumentNullException,尽管在任何时候都没有实例为空。

我的自包含代码:

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!

}

【问题讨论】:

  • 这是因为您的clientMessage 已初始化但由于InitEmpty() 而没有任何MsgType。
  • @diiN_ 你建议如何初始化它?
  • 通过使用 InitPoolInitGC(看看 Guy 的回答)。

标签: c# .net exception zeromq netmq


【解决方案1】:

当您调用Put 时,它会调用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);
}

此时Datanull,而Buffer.BlockCopy抛出ArgumentNullException

尝试通过调用InitPoolInitGC 来初始化它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 2023-04-03
    • 1970-01-01
    • 2016-07-08
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多