C# 为什么我的代码注释会以不同的间隔创建4个独立的线程?
我想生成4个单独的线程来写入控制台 我认为这段代码将以n个间隔执行一个进程,这意味着第一个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
控制台.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();}
您的主程序不等待线程,它只是退出。这将关闭进程及其所有线程。