秒表线程执行后经过的时间
Stopwatch Elapsed time after thread execution
在下面的代码中,我试图在线程执行完成后显示秒表经过的时间,但我无法这样做
无论我是否使用thread.isalive,秒表的运行时间总是显示为0
如何在后台线程执行后显示秒表经过的时间?
class Program
{
static void myfunction()
{
Console.WriteLine("hi");
Thread.Sleep(2000);
Console.WriteLine("hi after 2 sec");
}
static void Main()
{
// create a new stopwatch and start it
Stopwatch s = new Stopwatch();
s.Start();
// make a new thread and start thread execution
Thread t = new Thread(myfunction);
t.Start();
// I m assuming that the thread t is dead once myfunction is completed
// display elapsed time when thread has finished work and is dead
if (!t.IsAlive)
s.Stop();
Console.WriteLine("Time elapsed: {0}", s.Elapsed.Seconds.ToString());
Console.ReadKey();
}
}
你的假设是错误的:
这是因为您的线程执行是异步的。你告诉你的程序启动线程(这将至少执行 2 秒),然后主线程继续执行你的 if
语句是假的(线程仍然是 运行 在后台) .
解决这个问题的一种方法是将秒表传递给 myfunction
:
static void myfunction(Stopwatch s)
{
Console.WriteLine("hi");
Thread.Sleep(2000);
Console.WriteLine("hi after 2 sec");
Console.WriteLine("Time elapsed: {0}", s.Elapsed.Seconds.ToString());
}
然后在 Main
中将线程初始化替换为:
Thread t = new Thread(() => myfunction(s));
在下面的代码中,我试图在线程执行完成后显示秒表经过的时间,但我无法这样做
无论我是否使用thread.isalive,秒表的运行时间总是显示为0
如何在后台线程执行后显示秒表经过的时间?
class Program
{
static void myfunction()
{
Console.WriteLine("hi");
Thread.Sleep(2000);
Console.WriteLine("hi after 2 sec");
}
static void Main()
{
// create a new stopwatch and start it
Stopwatch s = new Stopwatch();
s.Start();
// make a new thread and start thread execution
Thread t = new Thread(myfunction);
t.Start();
// I m assuming that the thread t is dead once myfunction is completed
// display elapsed time when thread has finished work and is dead
if (!t.IsAlive)
s.Stop();
Console.WriteLine("Time elapsed: {0}", s.Elapsed.Seconds.ToString());
Console.ReadKey();
}
}
你的假设是错误的:
这是因为您的线程执行是异步的。你告诉你的程序启动线程(这将至少执行 2 秒),然后主线程继续执行你的 if
语句是假的(线程仍然是 运行 在后台) .
解决这个问题的一种方法是将秒表传递给 myfunction
:
static void myfunction(Stopwatch s)
{
Console.WriteLine("hi");
Thread.Sleep(2000);
Console.WriteLine("hi after 2 sec");
Console.WriteLine("Time elapsed: {0}", s.Elapsed.Seconds.ToString());
}
然后在 Main
中将线程初始化替换为:
Thread t = new Thread(() => myfunction(s));