计时器未运行

时间:2018-01-17 16:07:53

标签: c# timer

这是我的代码的一部分:

  if (direccion.Equals("este"))
        {
        System.Timers.Timer trampa = new System.Timers.Timer();
        trampa.Elapsed += new ElapsedEventHandler(OnTimedEvent);
        trampa.Interval = 2000;
        trampa.Enabled = true;
        Console.WriteLine("Te encuentras con una granja abandonada, al entrar a la misma, te das cuenta que hay un cofre al final del pasillo principal.");
        Console.WriteLine("Al acercarte al pasillo, sientes que el piso se mueve.");
        Console.ReadLine();
        }
    }

问题是OnTimedEvent永远不会被执行,我认为计时器不起作用或者至少不正常。

private static void OnTimedEvent(object sender, ElapsedEventArgs e)
{
    Random frn = new Random();
    int ran = frn.Next(1, 4);
    System.Timers.Timer caida = new System.Timers.Timer();
    caida.Elapsed += new ElapsedEventHandler(OnTimedEvent2);
    var direccion = Console.ReadLine();
    Console.WriteLine("¡La madera del piso esta extremadamente podrida y se despedaza hacia un abismo!");
    switch (ran)
    {
        case 1:
            caida.Interval = 2500;
            caida.Enabled = true;
            Console.WriteLine("¡Salta hacia ADELANTE para evitar caerte!");
            if (direccion.Equals("adelante"))
            {
                Console.WriteLine("Saltaste hacia adelante, sin embargo, estas atrapado entre el abismo y el cofre.");
                Console.WriteLine("Despues de esperar varios dias por rescate, mueres por deshidratacion.");
                Console.ReadLine();
                caida.Enabled = false;
            }
            else
            {
                Console.WriteLine("No saltaste donde debias y caiste al abismo.");
                Console.ReadLine();
            }
            break;

        case 2:
            caida.Interval = 2000;
            caida.Enabled = true;
            Console.WriteLine("¡Salta hacia ATRAS para evitar caerte!");
            if (direccion.Equals("atras"))
            {
                Console.WriteLine("Saltaste hacia atrás, evitando asi caerte, sin embargo ahora no puedes alcanzar el cofre.");
                Console.WriteLine("Vuelves a casa con las manos vacias.");
                Console.ReadLine();
                caida.Enabled = false;
            }
            else
            {
                Console.WriteLine("No saltaste donde debias y caiste al abismo.");
                Console.ReadLine();
            }
            break;

        case 3:
            caida.Interval = 2000;
            caida.Enabled = true;
            Console.WriteLine("¡Salta hacia IZQUIERDA para evitar caerte!");
            if (direccion.Equals("izquierda"))
            {
                Console.WriteLine("Saltas hacia la izquierda, sin embargo, ahora no puedes alcanzar el cofre.");
                Console.WriteLine("Bordeas el agujero del abismo y luego te devuelves a casa con las manos vacias.");
                Console.ReadLine();
                caida.Enabled = false;
            }
            else
            {
                Console.WriteLine("No saltaste donde debias y caiste al abismo.");
                Console.ReadLine();
            }
            break;
    }
}

private static void OnTimedEvent2(object sender, ElapsedEventArgs e)
{
    Console.WriteLine("X Y Z");
}

1 个答案:

答案 0 :(得分:2)

Console.ReadLine()方法中的问题是OnTimedEvent()。这种方法  将在另一个线程中运行,并且您的主线程当前已经在监听控制台输入。

我建议阅读this question/answer,了解从不同线程读取输入/添加超时的方法。