简体   繁体   English

无法理解为什么变量未更新的问题

[英]Trouble with understanding why a variable isn't being updated

I'm a novice programmer and am having trouble understanding why this isn't working. 我是一个新手程序员,无法理解为什么它不起作用。 I have a "ConnectedClientList" class: 我有一个“ 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);
    }
}

I have this in another class: 我在另一堂课中有这个:

ClientPeer clientPeer = new ClientPeer(request, Logger, _clientHandlerRegistry);

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

And then finally I have this: 最后我有了这个:

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");
        }
    }

I am trying to build a server using Exitgame's Photon Server. 我正在尝试使用Exitgame的Photon Server构建服务器。 When I first create the clientpeer and then add it to the "ConnectedClientPeers" I immediately have debug info saying that the "ConnectedClientPeers" list does in fact now have a count of 1. 当我第一次创建clientpeer,然后将其添加到“ ConnectedClientPeers”时,我立即获得调试信息,说“ ConnectedClientPeers”列表实际上实际上已经计数为1。

The thread I'm running seems to be repeating the "SendUpdateEventToClients" just fine, but the debug message in that function always says that my "ConnectedClientPeers" list has a count of 0. 我正在运行的线程似乎很好地重复了“ SendUpdateEventToClients”,但是该函数中的调试消息始终表示我的“ ConnectedClientPeers”列表的计数为0。

I'm sure it's probably something simple I'm not aware of, but I haven't had any luck finding a solution for the passed couple of days. 我敢肯定这可能是我不知道的简单事情,但是过去几天我没有运气找到解决方案。 Any help or advice is greatly appreciated. 任何帮助或建议,我们将不胜感激。 Thanks! 谢谢!

-Jarryd -杰里德

--Edit-- - 编辑 -

I updated the class to make the entire class static, but still have the same problem. 我更新了该类以使整个类静态化,但是仍然存在相同的问题。

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);
    }
}

My debug log: 2016-08-08 14:27:21,771 [ThreadFiber-1] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0 我的调试日志:2016-08-08 14:27:21,771 [ThreadFiber-1]信息[CharacterUpdateEventHandler] [55] [(null)]-已连接的客户端对等体数量:0

2016-08-08 14:27:23,428 [ThreadFiber-2] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0 2016-08-08 14:27:23,428 [ThreadFiber-2]信息[CharacterUpdateEventHandler] [55] [(null)]-已连接的客户端对等体数量:0

2016-08-08 14:27:26,771 [ThreadFiber-1] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0 2016-08-08 14:27:26,771 [ThreadFiber-1]信息[CharacterUpdateEventHandler] [55] [(null)]-已连接的客户端对等体数量:0

2016-08-08 14:27:28,443 [ThreadFiber-2] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0 2016-08-08 14:27:28,443 [ThreadFiber-2]信息[CharacterUpdateEventHandler] [55] [(null)]-已连接的客户端对等体数量:0

2016-08-08 14:27:31,774 [ThreadFiber-1] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0 2016-08-08 14:27:31,774 [ThreadFiber-1]信息[CharacterUpdateEventHandler] [55] [(null)]-已连接的客户端对等体数量:0

2016-08-08 14:27:33,453 [ThreadFiber-2] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0 2016-08-08 14:27:33,453 [ThreadFiber-2]信息[CharacterUpdateEventHandler] [55] [(null)]-已连接的客户端对等体数量:0

2016-08-08 14:27:36,787 [ThreadFiber-1] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0 2016-08-08 14:27:36,787 [ThreadFiber-1]信息[CharacterUpdateEventHandler] [55] [(null)]-已连接的客户端对等体数量:0

2016-08-08 14:27:38,465 [ThreadFiber-2] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0 2016-08-08 14:27:38,465 [ThreadFiber-2]信息[CharacterUpdateEventHandler] [55] [(null)]-已连接的客户端对等体数量:0

Not sure how to post code in a comment, this much of your code seems fine 不确定如何在注释中发布代码,您的大部分代码看起来都很好

  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);
                    }
                }


            }
        }
    }

So this just adds 3 peers and displays the count and shows that there are indeed 3 所以这只增加了3个对等点并显示计数,并表明确实有3个

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM