Поток запускается как часть "основного" контекста выполнения. Таким образом, при выходе из «main» «thr» будет собран и завершен, поскольку он является мгновенной частью основной программы. Во-вторых, «thr» запустился, поспал 2 секунды и вышел, делая то, что вы сказали. Если thr предназначен для продолжения работы, то он должен содержать al oop некоторого вида и реализацию сигнализации, чтобы сообщать ему о выходе, когда он больше не нужен.
Я еще не пробовал, но добавляю следующее для эксперимента. Это может работать ближе к тому, что вы пытаетесь сделать, но это не очень хороший способ сделать это.
static void mythread()
{
Do{
// Display the name of the
// current working thread
Console.WriteLine("In progress thread is: {0}",
Thread.CurrentThread.Name);
Thread.Sleep(2000);
Console.WriteLine("Completed thread is: {0}",
Thread.CurrentThread.Name);
}
While(sinalvariable) // signal variable changed by some other code
//To tell thread to exit the whileloop
}
Если вы хотите, чтобы код оставался загруженным и работающим после основного выхода из исходного кода, вам нужно использовать другую стратегию. Вам нужно запустить код как «Процесс».
Я не могу дать полный ответ, так как проблема не ясна.
Ваша программа делает именно то, что ей нужно.