【发布时间】:2010-03-18 09:26:28
【问题描述】:
我正在运行以下代码来启动我的线程,但它们没有按预期启动。出于某种原因,一些线程以相同的对象开始(有些甚至不开始)。如果我尝试调试,它们就可以正常启动(我单击 F10 单步执行代码会增加额外的延迟)。
这些是我的表单应用程序中的功能:
private void startWorkerThreads()
{
int numThreads = config.getAllItems().Count;
int i = 0;
foreach (ConfigurationItem tmpItem in config.getAllItems())
{
i++;
var t = new Thread(() => WorkerThread(tmpItem, i));
t.Start();
//return t;
}
}
private void WorkerThread(ConfigurationItem cfgItem, int mul)
{
for (int i = 0; i < 100; i++)
{
Thread.Sleep(10*mul);
}
this.Invoke((ThreadStart)delegate()
{
this.textBox1.Text += "Thread " + cfgItem.name + " Complete!\r\n";
this.textBox1.SelectionStart = textBox1.Text.Length;
this.textBox1.ScrollToCaret();
});
}
谁能帮帮我?
【问题讨论】:
-
与其自己创建所有线程,这是一项相当昂贵的操作,不如使用线程池。
-
在多线程应用程序中...调试无济于事...它会给您带来与实时场景不同的结果...使用日志/打印语句...
标签: c# windows multithreading forms race-condition