Как видно из выходного журнала, между событиями «Служба запущена» около 50 секунд. Я думаю, что они происходят из двух разных прогонов вашего приложения.
Другое дело, почему вы не получаете вывод из Thread2. Это потому, что ваш Thread1 получил эксклюзивный доступ к файлу журнала. Поток 2 пытается получить доступ к файлу, получает исключение (IOException), поскольку файл используется, но нет способа зарегистрировать это исключение, поэтому поток тихо умирает.
Если вы хотите записать информацию в свой журнал из нескольких потоков, вам нужно синхронизировать доступ к файлу. Я бы предложил создать специальный класс для этого. Нечто подобное (самое простое, только для демонстрационных целей):
public static class Log1
{
private static string filePath;
private static object syncRoot = new object();
public static void WriteLine(string m)
{
lock (syncRoot)
{
if (string.IsNullOrEmpty(filePath))
{
filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "test20");
Directory.CreateDirectory(filePath);
filePath = Path.Combine(filePath, "Print_" + DateTime.Today.ToString("dd-MM-yyyy") + ".txt");
}
File.AppendAllText(filePath, m + Environment.NewLine);
}
}
}
Тогда ваш метод потока превращается в:
public void TextLog()
{
try
{
Thread thr = Thread.CurrentThread;
int j = 0;
Log1.WriteLine("-----------------------------------------------------------------");
Log1.WriteLine(_message + " " + DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss:ffff"));
if (_message == "Service Stopped ...............")
{
}
else
{
for (int i = 0; i < 10; i++)
{
Thread thr2 = Thread.CurrentThread;
if (thr2.Name == "Thread1")
{
Log1.WriteLine(thr2.Name + " : " + i + " " + DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss:ffff"));
}
else
{
Log1.WriteLine(thr2.Name + " ::: " + i + " " + DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss:ffff"));
}
j = j + 1;
Log1.WriteLine("Thread will sleep now -----------------------------------------------------------------");
Thread.Sleep(1000);
Log1.WriteLine("Thread came out from sleeping -----------------------------------------------------------------");
}
}
}
catch (Exception e)
{
_message = e.Message;
Log1.WriteLine(e.ToString());
}
}
, который эффективно производит что-то вроде:
-----------------------------------------------------------------
-----------------------------------------------------------------
Seconf Thread : Service Started 2018.08.28 10:27:19:8441
Thread2 ::: 0 2018.08.28 10:27:19:8491
Thread will sleep now
-----------------------------------------------------------------
First Thread : Service Started 2018.08.28 10:27:19:8402
Thread1 : 0 2018.08.28 10:27:19:8691
Thread will sleep now
-----------------------------------------------------------------
Thread came out from sleeping
-----------------------------------------------------------------
Thread2 ::: 1 2018.08.28 10:27:20:8665
Thread will sleep now
...