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

C# 为什么我的代码注释会以不同的间隔创建4个独立的线程?,c#,multithreading,.net-4.0,C#,Multithreading,.net 4.0,我想生成4个单独的线程来写入控制台 我认为这段代码将以n个间隔执行一个进程,这意味着第一个控制台.WriteLine将在1分钟后执行,第二个将在4分钟后执行,依此类推 private static void CopyFiles() { string strCmdText; strCmdText= @"xcopy C:\Users\Me\Documents\Files\*.* C:\Users\Me\Documents\Files\JustTest"; System.Dia

我想生成4个单独的线程来写入控制台

我认为这段代码将以n个间隔执行一个进程,这意味着第一个
控制台.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));
    }
}
通过调试或直接从命令提示符运行,我在控制台窗口中看不到任何输出


我做错了什么?

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

Thread.Sleep(Timeout.Infinite);
(希望,我没记错。)


计时器不使用线程,它们在后台线程池线程上调用回调。它们不会使进程保持活动状态。

计时器不是在构造函数中以
TimeSpan.FromMinutes(int)
启动的吗?在这种情况下,4分钟后将开始执行System.Threading.Timer t1
。由于没有一个委托将完成,1ms的时间不是很长。命令提示符是否立即退出?或者它坐在那里没有输出任何东西。基本上,您可以向我们展示调用
TestThreads()
的代码吗?这是一个控制台应用程序,看起来是这样的:
static void Main(string[]args){TestThreads();}
您的主程序不等待线程,它只是退出。这将关闭进程及其所有线程。