У меня есть таймер, выполняющий цикл, выполняющий серию потоков.Каждый поток просто опрашивает последовательное устройство (на уникальных портах) и записывает данные в базу данных MySQL для захвата веб-приложением.
Я заметил, что выполняется только последний поток в цикле.
Вот мой метод таймера Interval
.
static void glob_timer_Elapsed(object sender, ElapsedEventArgs e)
{
foreach (object[] row in user_ids)
{
Console.WriteLine(row[0].ToString() + ":" + row[1].ToString());
ThreadStart starter = delegate { Functions.UpdateFor(row[0].ToString(), row[1].ToString()); };
new Thread(starter).Start();
}
}
user_ids - это List<object[]>
, содержащий строки из запроса;так row[0]
= идентификатор пользователя , row[1]
= Имя Com-порта
В функции UpdateFor()
:
public static void UpdateFor(string uid, string com_name)
{
try
{
Console.WriteLine("[" + uid + "]- " + DateTime.Now.ToString() + " : " + "Begin read transmission.");
Когдаэто запускается, в консоли я вижу
1:COM1
2:COM2
[2]-{DateTime} : Begin read transmission
Почему я не вижу UpdateFor
для uid 1.
Примечание: я также проверил данные, которые должны бытьзаписано в БД из COM1 никогда не пишется.