在提供Console.Readline()之前,ThreadStart委托不会执行

时间:2018-07-20 11:55:21

标签: c# multithreading

我对ThreadStart委托有一些问题。提供函数并启动线程后,实际上没有任何反应。我需要添加Console.Readline()才能将消息写入文件。为什么会这样呢?

using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

namespace ThreadStart
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread thread = new Thread(new System.Threading.ThreadStart(() =>
            {
               int messageSeq = 0;

               while (messageSeq < 5)
               {
                   File.AppendAllText(@"c:\Test\write.txt", DateTime.Now.ToString() + Environment.NewLine);
                   messageSeq++;
                   Thread.Sleep(TimeSpan.FromMinutes(1));
               }
            }));
            thread.IsBackground = true;
            thread.Start();
            //Console.ReadLine();
        }
    }
}

我没有多线程应用程序的经验,所以我可能缺少一些简单的东西

1 个答案:

答案 0 :(得分:5)

Thread.IsBackground Property

  

线程是后台线程或前台线程。后台线程与前台线程相同,只是后台线程不会阻止进程终止。

您要告诉线程不要强制应用程序继续运行,然后通过从Main方法返回来关闭应用程序。

Console.ReadLine();将阻止应用程序从Main返回,并给予线程时间来完成工作。

Thread.Start Method

  

请注意,对Start的调用不会阻止调用线程。

Start的{​​{1}}方法不会阻塞调用线程。这意味着它将立即返回〜,并且调用线程继续执行。

Console.ReadLine Method

  

如果标准输入设备是键盘,则ReadLine方法将阻塞,直到用户按下Enter键。

Thread确实阻塞了调用线程,直到用户在控制台中按Enter /返回(引起新行)为止。