当前上下文中不存在名称“”

the name '' does not exist in the current context

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

我知道我需要将变量更改为 public 但是当我添加 static public PublisherSocket pubSocket = new PublisherSocket(); 在 class 的开头,代码无法正常工作。 另外,问题是我需要在 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();
    }
}
}

如前所述,要么在 class

中创建一个私有静态变量
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 中以确保正确清理。

希望对您有所帮助。