【问题标题】:the name '' does not exist in the current context当前上下文中不存在名称“”
【发布时间】:2018-05-22 11:38:26
【问题描述】:

您好,由于错误,我无法修复 OnLoginSuccess() pubSocket.SendMoreFrame("TopicA").SendFrame("Hello"); 变量中的问题 当前上下文中不存在名称“”。

我知道我需要将变量更改为公共但是当我添加 static public PublisherSocket pubSocket = new PublisherSocket(); 在课程开始时,代码无法正常工作。 另外,问题是我需要在 Main() 中设置一些选项(.Options,.Bind)。

using System;
using System.Threading;
using NetMQ;
using NetMQ.Sockets;

namespace Publisher
{
class Program
{

    static public void OnLoginSuccess()
    {
        pubSocket.SendMoreFrame("TopicA").SendFrame("Hello");
    }

    static void Main(string[] args)
    {


        using (var pubSocket = new PublisherSocket())
        {
            pubSocket.Options.SendHighWatermark = 1000;
            pubSocket.Bind("tcp://localhost:12345");             
        }

        OnLoginSuccess();
    }
}
}

【问题讨论】:

  • 您的 pubSocket 仅在您的 Main() 中声明,而不在 OnLoginSuccess 中声明
  • 听起来您需要将变量声明为静态字段,但您仍然可以在Main初始化它。 (或者可能会更改您的设计,以便将其传递给 OnLoginSuccess()。)
  • 另一个问题是pubSocket 也会在onLoginSuccess 被调用时被释放。

标签: c# public netmq


【解决方案1】:

如前所述,要么在类中创建一个私有静态变量

private static PublisherSocket  pubSocket;

或将套接字引用传递给您的 OnLoginSuccess 方法。

 static public void OnLoginSuccess(PublisherSocket socket)
 {
       socket.SendMoreFrame("TopicA").SendFrame("Hello");
 }

正如 Evan 所指出的,由于使用了 using 符号,您的 ref 将被处理掉。完成后将其删除并丢弃。

 var pubSocket = new PublisherSocket()
 {
       pubSocket.Options.SendHighWatermark = 1000;
       pubSocket.Bind("tcp://localhost:12345");
 };

 OnLoginSuccess(pubSocket);
 pubSocket.Dispose();

您可能希望将调用放入 try catch finally 并将 dispose 放入 finally 以确保正确清理它。

希望对您有所帮助。

【讨论】:

  • 谢谢!我添加了“私有静态 PublisherSocket pubSocket;”代码开始工作!
  • @sortedMAN - 太好了。请随时投票并选择作为您的答案:)
猜你喜欢
  • 2013-10-02
  • 2014-04-22
  • 2017-06-17
  • 2015-09-11
  • 1970-01-01
  • 2022-12-18
  • 2020-11-02
  • 2011-10-19
相关资源
最近更新 更多