我对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();
}
}
}
我没有多线程应用程序的经验,所以我可能缺少一些简单的东西
答案 0 :(得分:5)
线程是后台线程或前台线程。后台线程与前台线程相同,只是后台线程不会阻止进程终止。
您要告诉线程不要强制应用程序继续运行,然后通过从Main
方法返回来关闭应用程序。
Console.ReadLine();
将阻止应用程序从Main
返回,并给予线程时间来完成工作。
请注意,对Start的调用不会阻止调用线程。
Start
的{{1}}方法不会阻塞调用线程。这意味着它将立即返回〜,并且调用线程继续执行。
如果标准输入设备是键盘,则ReadLine方法将阻塞,直到用户按下Enter键。
Thread
确实阻塞了调用线程,直到用户在控制台中按Enter /返回(引起新行)为止。