为什么我的代码注释会以不同的间隔创建4个单独的线程?

时间:2014-07-01 21:43:58

标签: c# multithreading .net-4.0

我想生成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));
    }
}

我在控制台窗口中看不到任何输出,无论是通过调试还是直接从命令提示符运行。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

当main方法退出时,进程中唯一的(前台)线程退出。当发生这种情况时,CLR会关闭该过程。使主要方法保持活动状态,例如暂停:

Thread.Sleep(Timeout.Infinite);

(希望,我记得那是对的。)

定时器不使用线程,它们在后台线程池线程上调用回调。他们没有让流程保持活力。