试图全局访问变量

Rei*_*awi 0 c# double timer

我有一个迷宫游戏,我试图一次创建两个计时器.1号(300秒后退出比赛)

t1.Interval = 30000;
t1.Enabled = true;
t1.Elapsed += new ElapsedEventHandler(hiddenTimer);

public static void hiddenTimer(object source, ElapsedEventArgs e)
    {
        Console.Clear();
        Environment.Exit(1);
    }
Run Code Online (Sandbox Code Playgroud)

2号(显示每1秒剩余的时间(如真实计时器))

t2.Interval = 1000;
t2.Enabled = true;
t2.Elapsed += new ElapsedEventHandler(showTimer);

public static void showTimer(object source, ElapsedEventArgs e)
    {
        Console.Write(timeLeft);
    }
Run Code Online (Sandbox Code Playgroud)

我想在全局范围内传递声明timeLeft,但它说"非静态字段,方法或属性需要一个对象引用......"

我该如何正确申报?

Fil*_*erg 7

通过制作静态属性:

public static Double TimeLeft { get; set; }
Run Code Online (Sandbox Code Playgroud)

如果您希望Publicliy可以从您的整个上下文访问,如果您想要私有,只需更改publicprivate.

只是旁注,内置Timer不支持轮询剩余时间直到下一次.您可以在1秒计时器中减少TimeLeft每个Elapse事件,也可以查看此事件.

编辑

这是使用一个计时器的一种方法,首先我声明我使用的两个属性和一个常量字段,不要打扰它们是静态的,这样就更容易将它作为控制台应用程序运行.

public static Timer SystemTimer { get; set; }
public static double Elapsed { get; set; }

private const double CycleInterval = 1000;
Run Code Online (Sandbox Code Playgroud)

然后在我的Main方法中,我有以下内容来启动我的Timer

SystemTimer = new Timer();
SystemTimer.Interval = CycleInterval;
SystemTimer.Enabled = true;
SystemTimer.Elapsed += Cycle;

SystemTimer.Start();
Run Code Online (Sandbox Code Playgroud)

有了这个,Cycle-event处理程序可以如下所示:

static void Cycle(object sender, ElapsedEventArgs e)
{
    Elapsed += CycleInterval;

    if ((Elapsed%5000) == 0.0)
    {
        Console.WriteLine("5 sec elapsed!");
        // Do stuff each 5 sec
    }

    if ((Elapsed % 10000) == 0.0)
    {
        Console.WriteLine("10 sec elapsed!");
        // Do stuff each 10 sec
    }

    Console.WriteLine("Elapsed: {0}", Elapsed);
}
Run Code Online (Sandbox Code Playgroud)

你也可以Elapsed成为一个TimeSpan,但你可以随心所欲地重构它.

这是我使用的完整源代码:

using System;
using System.IO;
using System.Timers;

namespace ConsoleApplication5
{
    class Program
    {
        public static Timer SystemTimer { get; set; }
        public static double Elapsed { get; set; }

        private const double CycleInterval = 1000;

        static void Main(string[] args)
        {
            SystemTimer = new Timer();
            SystemTimer.Interval = CycleInterval;
            SystemTimer.Enabled = true;
            SystemTimer.Elapsed += Cycle;

            SystemTimer.Start();

            while (true) ;

        }

        static void Cycle(object sender, ElapsedEventArgs e)
        {
            Elapsed += CycleInterval;

            if ((Elapsed%5000) == 0.0)
            {
                Console.WriteLine("5 sec elapsed!");
                // Do stuff each 5 sec
            }

            if ((Elapsed % 10000) == 0.0)
            {
                Console.WriteLine("10 sec elapsed!");
                // Do stuff each 10 sec
            }

            Console.WriteLine("Elapsed: {0}", Elapsed);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我运行时的样子:

在此输入图像描述