これはこのフォーラムでの最初の質問なので、明確にしたいと思います:
C# で Visual Studio 2010 RTM プログラミングを使用しています。
スレッドに変換されるクラスのコンストラクターは、常に最後のディクショナリ エントリから値を取得します。私は何が間違っているのかわからない、誰か?
このコードは機能しません:
Dictionary<string, Queue<string>> colas;
public DataDispatcher(Dictionary<string, int> lectoras, ReadEventHandler callback)
{
colas = new Dictionary<string, Queue<string>>();
foreach (KeyValuePair<string, int> pair in lectoras)
{
colas.Add(pair.Key, new Queue<string>>());
Thread hilo = new Thread(
() => new ReadHandler(pair.Value, colas[pair.Key], callback));
hilo.Name = "Hilo-" + hilo.ManagedThreadId.ToString();
hilo.Start();
}
}
代わりに、このコードは完全に機能します。
Dictionary<string, Queue<string>> colas;
public DataDispatcher(Dictionary<string, int> lectoras, ReadEventHandler callback)
{
colas = new Dictionary<string, Queue<string>>();
foreach (KeyValuePair<string, int> pair in lectoras)
{
Queue<string> qs = new Queue<string>();
colas.Add(pair.Key, qs);
int jaula = pair.Value;
Thread hilo = new Thread(
() => new ReadHandler(jaula, qs, callback));
hilo.Name = "Hilo-" + hilo.ManagedThreadId.ToString();
hilo.Start();
}
}