私はオブジェクトのリストを持っています。そのリストをループして新しいスレッドを開始し、現在のオブジェクトを渡したいと思います。foreachループで新しいスレッドを開始する
私はこれを行うべきだと思った例を書いたが、うまくいかない。具体的には、各繰り返しでスレッドが上書きされているようです。私は新しいThreadオブジェクトを毎回作成しているので、これは私にとっては意味がありません。
これは私が私のマシン上で
class Program
{
static void Main(string[] args)
{
TestClass t = new TestClass();
t.ThreadingMethod();
}
}
class TestClass
{
public void ThreadingMethod()
{
var myList = new List<MyClass> { new MyClass("test1"), new MyClass("test2") };
foreach(MyClass myObj in myList)
{
Thread myThread = new Thread(() => this.MyMethod(myObj));
myThread.Start();
}
}
public void MyMethod(MyClass myObj) { Console.WriteLine(myObj.prop1); }
}
class MyClass
{
public string prop1 { get; set; }
public MyClass(string input) { this.prop1 = input; }
}
に出力を書いたテストコードでは
test2
test2
ですが、私は、スレッドラインを変更しようとしたことが
test1
test2
ことが期待しました〜
ThreadPool.QueueUserWorkItem(x => this.MyMethod(myObj));
しかし、開始されたスレッドはありません。
私はスレッドの動作方法について誤解していると思います。誰かが私を正しい方向に向けることができ、私が間違っていることを教えてもらえますか?
あなたの人生になります.Net 3.5で導入されたParallel Extensions Libraryをチェックするとずっと簡単です。開始する場所は次のとおりです。http://msdn.microsoft.com/en-us/library/dd460693%28VS.100%29.aspx – DOK
http://www.albahari.com/threading/ –