C# 在定时器停止c时启用功能#

C# 在定时器停止c时启用功能#,c#,timer,C#,Timer,我猜这个问题已经被问了1000次了,但我不知道我做错了什么。我在C#中使用计时器。如果过期,则应将值设置为1以启用其他功能。我的意图是阻止一个函数,直到计时器滴答作响。如果计时器停止,则应启用新功能 using System.Timers; public float testNumber; private Timer timer; void Gearup () { if (currentGear < 5) { currentGear = current

我猜这个问题已经被问了1000次了,但我不知道我做错了什么。我在C#中使用计时器。如果过期,则应将值设置为1以启用其他功能。我的意图是阻止一个函数,直到计时器滴答作响。如果计时器停止,则应启用新功能

using System.Timers;    
public float testNumber;
private Timer timer;


void Gearup ()
{

    if (currentGear < 5) {
        currentGear = currentGear + 1;

        timer = new Timer ();
        timer.Interval=2000;
        timer.AutoReset = true;
        timer.Start();
        testNumber = 10;
    }
    if (timer.Enabled != false) {
        testNumber = 1;

} 
使用系统定时器;
公众浮点数;
私人定时器;
无效加速()
{
如果(当前档位<5){
currentGear=currentGear+1;
定时器=新定时器();
时间间隔=2000;
timer.AutoReset=true;
timer.Start();
testNumber=10;
}
如果(timer.Enabled!=false){
testNumber=1;
} 
你们能帮帮我吗?每次我测试我的代码,测试编号都会立即设置为1。请温柔一点,我知道我 我是个笨蛋


更新问题:我的问题是,我的游戏角色应该在游戏中换档。换档后,不应允许该角色将其右后换档。这就是为什么我要在几秒钟内阻止换档功能。

当计时器启动时
计时器。启用的
设置为true。然后你的程序跳转到t他

if (timer.Enabled != false) {
        testNumber = 1;

}
阻塞。因为timer.Enabled不等于false它是true!您必须将其设置为

if (timer.Enabled == false) {
        testNumber = 1;

//for timer restart use:
timer.Start();

}


因此,您需要以两秒的间隔启动计时器。当计时器过期时,您希望将变量testNumber设置为1。
这种情况只发生一次,然后停止

然后,您应该将AutoReset属性设置为false,并为经过的事件添加事件处理程序

testNumber = 10;
Timer timer = new Timer();
timer.Elapsed += (s, o) => 
{ 
     Console.WriteLine("Timer elapsed"); 
     testNumber = 1;
};
timer.Interval = 2000;
timer.AutoReset = false;
timer.Start();

现在,您不需要停止并检查任何内容。继续从Gearup方法退出您的代码。在间隔时间过后,全局变量testNumber将设置为1。

请向我们展示整个方法。包括声明计时器变量的行。我真的不明白您试图实现什么。请告诉我们,可以吗编辑问题并阐明你的目的?有可能
计时器
不是你真正想要的。@TotalNoob不要用很多行代码发表评论。你可以轻松地回答问题并格式化代码appropriately@Steve很抱歉,我更改了它,但Enabled=False仅在2秒后才会生效。将评估if在计时器触发第一个事件之前有很多时间,并且在任何情况下,Autoreset=True意味着它将永远不会被启用=False。@Steve您可以在if块中重新启动计时器。很高兴能提供帮助。作为该网站的新用户,我建议您阅读,如果您发现此处的所有或部分aswer都有帮助,请表示感谢。
testNumber = 10;
Timer timer = new Timer();
timer.Elapsed += (s, o) => 
{ 
     Console.WriteLine("Timer elapsed"); 
     testNumber = 1;
};
timer.Interval = 2000;
timer.AutoReset = false;
timer.Start();