【发布时间】:2012-03-14 04:23:53
【问题描述】:
我有一个对象列表,我想遍历该列表并启动一个新线程,传入当前对象。
我已经写了一个我认为应该这样做的示例,但它不起作用。具体来说,似乎线程在每次迭代中都被覆盖了。但这对我来说真的没有意义,因为我每次都在创建一个新的 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 中引入的并行扩展库,您的生活将会轻松很多。这是一个开始的地方:msdn.microsoft.com/en-us/library/dd460693%28VS.100%29.aspx
标签: c# .net multithreading foreach