我确定这有一个非常简单的解决方案,但我在这方面非常糟糕...... 我希望"时间到了!"文本仅在2分钟计时器后显示,当它开始时和2分钟后,我认为bool会这样做,但我不能让它工作,我认为它与"静态无效" " public void"但我不确定,任何帮助都会受到大力赞赏!
class Program
{
bool a = false;
static void Main(string[] args)
{
//Define thread
Console.WriteLine("Start, you have 2 mins!");
//120000 is milliseconds, so every 120 seconds it will run the thread function
System.Threading.Timer threadingTimer = new Timer(run, 0, 0, 120000);
a = true;
Console.ReadLine();
}
//define thread function
public void run(object args)
{
if (a = true)
{
Console.WriteLine("Times Up!");
}
}
}
如果有一种更简单的方法可以实现这一目标,那也值得赞赏,谢谢你看看!
答案 0 :(得分:1)
您当前代码中的问题如下:以下if statement
始终为true
。
if (a = true)
{
Console.WriteLine("Times Up!");
}
为什么?在()
的{{1}}中,您应该传递一个有效的布尔表达式。当你写if statement
时你正在做的是
a = true
分配给true
a
的上下文中评估a
(及其新值)。由于if
的类型为a
,因此它会进行编译。 因此始终符合bool
,您始终可以获得打印。
你可能想要的是写if
。区别在于a == true
是等于运算符而不是赋值运算符。
顺便说一下,如果你看看visual studio会给你以下信息:
条件表达式中的赋值始终是常量;你的意思是使用==而不是=?
答案 1 :(得分:-1)
通过@Real Caz
尝试这个帖子How do you add a timer to a C# console application的答案using System;
using System.Timers;
namespace timer
{
class Program
{
static Timer timer = new Timer(1000);
static int i = 10; //this is for 10 seconds only change it as you will
static void Main(string[] args)
{
timer.Elapsed+=timer_Elapsed;
timer.Start();
Console.Read();
}
private static void timer_Elapsed(object sender, ElapsedEventArgs e)
{
i--;
Console.WriteLine("Time Remaining: " + i.ToString());
if (i == 0)
{
Console.WriteLine("Times up!");
timer.Close();
timer.Dispose();
}
GC.Collect();
}
}
}
答案 2 :(得分:-1)
您可以执行以下操作:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Start, you have 10 seconds!");
ShowMessageAfterDelay(TimeSpan.FromSeconds(10), "Time has lappsed!").Wait();
Console.ReadLine();
}
static async Task ShowMessageAfterDelay(TimeSpan timeSpan, string message)
{
await Task.Delay(timeSpan);
Console.WriteLine(message);
}
}