我想生成4个写入控制台的独立线程。
我认为这段代码将以n个间隔执行一个进程,这意味着第一个Console.WriteLine
将在1分钟后执行,第二个在4分钟后执行,依此类推。
private static void CopyFiles()
{
string strCmdText;
strCmdText= @"xcopy C:\Users\Me\Documents\Files\*.* C:\Users\Me\Documents\Files\JustTest";
System.Diagnostics.Process.Start("CMD.exe",strCmdText);
}
static void Main(string[] args)
{
TestThreads();
}
static void TestThreads()
{
Console.WriteLine("Begin TestThreads");
int firstQtr = 1;
int secondQtr = 4;
int thirdQtr = 6;
if (firstQtr >= 0)
{
System.Threading.Timer t0 = new Timer((s) =>
{
CopyFiles();
}, null, TimeSpan.FromMinutes(firstQtr), TimeSpan.FromMilliseconds(1));
}
if (secondQtr >= 0)
{
System.Threading.Timer t1 = new Timer((s) =>
{
for (; ; )
{
Console.WriteLine("Started at: " + DateTime.Now.ToString());
}
}, null, TimeSpan.FromMinutes(secondQtr), TimeSpan.FromMilliseconds(1));
}
if (thirdQtr >= 0)
{
System.Threading.Timer t2 = new Timer((s) =>
{
for (; ; )
{
Console.WriteLine("Started at: " + DateTime.Now.ToString());
}
}, null, TimeSpan.FromMinutes(thirdQtr), TimeSpan.FromMilliseconds(1));
}
}
我在控制台窗口中看不到任何输出,无论是通过调试还是直接从命令提示符运行。
我做错了什么?
答案 0 :(得分:2)
当main方法退出时,进程中唯一的(前台)线程退出。当发生这种情况时,CLR会关闭该过程。使主要方法保持活动状态,例如暂停:
Thread.Sleep(Timeout.Infinite);
(希望,我记得那是对的。)
定时器不使用线程,它们在后台线程池线程上调用回调。他们没有让流程保持活力。