难以理解为什么不更新变量

本文关键字:更新 变量 为什么不 | 更新日期: 2023-09-27 18:01:25

我是一个新手程序员,我很难理解为什么这个不工作。我有一个"ConnectedClientList"类:

public class ConnectedClientList
{
    static readonly object _lock = new object();
    public static IList<ClientPeer> ConnectedClientPeers;
    static ConnectedClientList()
    {
         ConnectedClientPeers = new List<ClientPeer>();
    }

    public static IList<ClientPeer> GetClientPeers()
    {
        lock (_lock)
        {
            return ConnectedClientPeers;
        }
    }
    public static void AddClientPeerToConnectedList(ClientPeer client)
    {
        lock (_lock)
        {
            ConnectedClientPeers.Add(client);
        }                
    }
    public void RemoveClientPeerFromConnectedList(ClientPeer client)
    {
        ConnectedClientPeers.Remove(client);
    }
}

我在另一个类中有这个:

ClientPeer clientPeer = new ClientPeer(request, Logger, _clientHandlerRegistry);
ConnectedClientList.AddClientPeerToConnectedList(clientPeer);
Logger.InfoFormat("Added clientpeer to list. Count is now: {0}", ConnectedClientList.ConnectedClientPeers.Count);

最后是这个

public CharacterUpdateEventHandler(ILogger logger)
    {
        Logger = logger;
        IFiber testFiber = new ThreadFiber();
        testFiber.Start();
        testFiber.ScheduleOnInterval(SendUpdateEventToClients, 1000, 5000);
    }
    public void SendUpdateEventToClients()
    {
        if(ConnectedClientList.GetClientPeers() != null)
            Logger.InfoFormat("# of connected client peers: {0}", ConnectedClientList.GetClientPeers().Count);
        else
        {
            Logger.InfoFormat("ConnectedClientPeers is null");
        }
    }

我正在尝试使用Exitgame的Photon服务器构建服务器。当我第一次创建客户端,然后将其添加到"ConnectedClientPeers",我立即有调试信息说,"ConnectedClientPeers"列表实际上现在有一个计数为1。

我正在运行的线程似乎正在重复"SendUpdateEventToClients"很好,但该函数中的调试消息总是说我的"ConnectedClientPeers"列表的计数为0。

我敢肯定这可能是一些我没有意识到的简单问题,但在过去的几天里,我没有找到任何解决方案。任何帮助或建议都是非常感激的。谢谢!

-Jarryd

——编辑——

我更新了类,使整个类静态,但仍然有相同的问题。

public static class ConnectedClientList
{
    static readonly object _lock = new object();
    public static readonly IList<ClientPeer> ConnectedClientPeers;
    static ConnectedClientList()
    {
         ConnectedClientPeers = new List<ClientPeer>();
    }

    public static IList<ClientPeer> GetClientPeers()
    {
        lock (_lock)
        {
            return ConnectedClientPeers;
        }
    }
    public static void AddClientPeerToConnectedList(ClientPeer client)
    {
        lock (_lock)
        {
            ConnectedClientPeers.Add(client);
        }                
    }
    public static void RemoveClientPeerFromConnectedList(ClientPeer client)
    {
        ConnectedClientPeers.Remove(client);
    }
}

我的调试日志:2016-08-08 14:27:21 1771 [ThreadFiber-1] INFO [CharacterUpdateEventHandler][55] [(null)] -已连接的客户端节点个数:0

2016-08-08 14:27:23,428 [ThreadFiber-2] INFO [CharacterUpdateEventHandler][55] [(null)] -已连接的客户端节点个数:0

2016-08-08 14:27:26,771 [ThreadFiber-1] INFO [CharacterUpdateEventHandler][55] [(null)] -已连接的客户端节点个数:0

2016-08-08 14:27:28,443 [ThreadFiber-2] INFO [CharacterUpdateEventHandler][55] [(null)] -已连接的客户端节点个数:0

2016-08-08 14:27:31,774 [ThreadFiber-1] INFO [CharacterUpdateEventHandler][55] [(null)] -已连接的客户端节点数:0

2016-08-08 14:27:33,453 [ThreadFiber-2] INFO [CharacterUpdateEventHandler][55] [(null)] -已连接的客户端节点个数:0

2016-08-08 14:27:36,787 [ThreadFiber-1] INFO [CharacterUpdateEventHandler][55] [(null)] -已连接的客户端节点个数:0

2016-08-08 14:27:38,465 [ThreadFiber-2] INFO [CharacterUpdateEventHandler][55] [(null)] -已连接的客户端节点个数:0

难以理解为什么不更新变量

不知道如何在注释中发布代码,这么多代码看起来很好

  using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    namespace ConsoleApplication6
    {
        class Program
        {
            static void Main(string[] args)
            {
                ClientPeer clientPeer = new ClientPeer();
                clientPeer.MyProperty = 5;
                ConnectedClientList.AddClientPeerToConnectedList(clientPeer);
                Console.WriteLine(ConnectedClientList.ConnectedClientPeers.Count.ToString());
                ConnectedClientList.AddClientPeerToConnectedList(clientPeer);
                Console.WriteLine(ConnectedClientList.ConnectedClientPeers.Count.ToString());

                clientPeer = new ClientPeer();
                ConnectedClientList.AddClientPeerToConnectedList(clientPeer);
                Console.WriteLine(ConnectedClientList.ConnectedClientPeers.Count.ToString());
            }
            public class ClientPeer
            {
                public int MyProperty { get; set; }
            }
            public static class ConnectedClientList
            {
                static readonly object _lock = new object();
                public static IList<ClientPeer> ConnectedClientPeers;
                static ConnectedClientList()
                {
                    ConnectedClientPeers = new List<ClientPeer>();
                }

                public static IList<ClientPeer> GetClientPeers()
                {
                    lock (_lock)
                    {
                        return ConnectedClientPeers;
                    }
                }
                public static void AddClientPeerToConnectedList(ClientPeer client)
                {
                    lock (_lock)
                    {
                        ConnectedClientPeers.Add(client);
                    }
                }

            }
        }
    }

这只是添加了3个节点并显示计数显示确实有3个