Я запускаю следующий код, чтобы начать мои темы, но они не начинаются так, как предполагалось. По какой-то причине некоторые из потоков начинаются с одних и тех же объектов (а некоторые даже не запускаются). Если я попытаюсь отлаживать, они начнутся просто отлично (дополнительная задержка добавлена мной, нажав 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();
});
}
Кто-нибудь может мне помочь?
Вместо того чтобы создавать все темы самостоятельно, это довольно дорогостоящая операция, вы можете использовать пул потоков. –
В многопоточном приложении ... отладка не поможет ... это даст вам отличный результат, чем в режиме реального времени ... Используйте заявление журнала/печати ... –