0
Thread
を外部クラスに実装されたメソッドで開始したいと思います。また、このメソッドへの参照をいくつかの外部プロパティに渡す必要があります。別のクラスとパラメータからスレッドを開始する
問題は、Visual StudioがAcvivate
方法はThread
を返すべきであると言う
Thread t = new Thread(Agent.Activate(agentParameters, ref tcpListener));
ここにあります。しかし、下の例では、そうしてはいけません。
私はこの例を使用しますが、それは助けになりません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();
}
}
これClientsMaxは、することになっていない方法です。ループを受け入れ、受け入れられたクライアントごとにスレッドを開始するスレッドを1つ開始します。 'if(socket.Connected)'も何もしません。 – usr