我有一个迷宫游戏,我试图一次创建两个计时器.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,但它说"非静态字段,方法或属性需要一个对象引用......"
我该如何正确申报?
通过制作静态属性:
public static Double TimeLeft { get; set; }
Run Code Online (Sandbox Code Playgroud)
如果您希望Publicliy可以从您的整个上下文访问,如果您想要私有,只需更改public
为private
.
只是旁注,内置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)
这就是我运行时的样子:
归档时间: |
|
查看次数: |
1641 次 |
最近记录: |