在这种情况下,不能让bool工作

时间:2017-07-15 15:34:19

标签: c# timer boolean

我确定这有一个非常简单的解决方案,但我在这方面非常糟糕...... 我希望"时间到了!"文本仅在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!");
        }

    }
}

如果有一种更简单的方法可以实现这一目标,那也值得赞赏,谢谢你看看!

3 个答案:

答案 0 :(得分:1)

您当前代码中的问题如下:以下if statement始终为true

if (a = true)
{
    Console.WriteLine("Times Up!");
}

为什么?()的{​​{1}}中,您应该传递一个有效的布尔表达式。当你写if statement时你正在做的是

  1. a = true分配给true
  2. a的上下文中评估a(及其新值)。由于if的类型为a,因此它会进行编译。
  3. 因此始终符合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);
    }
}