从不同的类和参数启动一个线程

本文关键字:线程 一个 启动 参数 | 更新日期: 2023-09-27 18:15:29

我想用在外部类中实现的方法开始Thread,并且我需要传递给该方法对某些外部属性的引用。

问题在这里

Thread t = new Thread(Agent.Activate(agentParameters, ref tcpListener));

Visual Studio说Acvivate方法应该返回Thread。但是通过下面的例子,它不应该。

我使用这个例子,但它没有帮助https://msdn.microsoft.com/en-us/library/system.threading.thread.setdata(v=vs.110).aspx。这是我的代码

    class TCPListenerManager
    {
        TcpListener tcpListener;
        public TCPListenerManager(HostListenerItem hostListenerItem)
        {
            tcpListener = new TcpListener(IPAddress.Parse(hostListenerItem.IP4), hostListenerItem.Port);
            for (int i = 0; i < hostListenerItem.ClientsMax; i++)
            {
                var agentParameters = new AgentParameters();
                Thread t = new Thread(Agent.Activate(agentParameters, ref tcpListener));
                t.Start();
            }
        }
    } // end of class DeviceAgent

 class Agent
    {
        [ThreadStaticAttribute]
        static int threadSpecificData;
        static public AgentParameters Parameters;
        public static void Activate(AgentParameters agentParameters, ref TcpListener tcpListener)
        {
            Parameters = agentParameters;
            threadSpecificData = Thread.CurrentThread.ManagedThreadId;
            var socket = tcpListener.AcceptSocket();
            if (socket.Connected)
            {
                //
                // logger.Info("Socket.Connected on" + socketParameters.HostListenerItem.Name + " " + socketParameters.HostListenerItem.Url);
            }
        }
    } // end of Agent

    class AgentParameters
    {
        public HostListenerItem HostListenerItem { get; set; }
        public AgentParameters()
        {
            HostListenerItem = new HostListenerItem();
        }
    }

从不同的类和参数启动一个线程

你必须将你的方法作为委托传递给新线程:

Thread t = new Thread(() => Agent.Activate(agentParameters, ref tcpListener));