Таймер - помощ !


0
Опитвам се да направя таймер, но не мога. Кодът :
using System;
using System.Diagnostics;
using System.Threading;
class Program
{
    static void Main(string[] args)
    {
        Stopwatch timer = new Stopwatch();
        TimeSpan a = new TimeSpan();
        timer.Start();
        do
        {
            TimeSpan beta = new TimeSpan(timer.Elapsed.Seconds);
            Console.WriteLine(timer.Elapsed.Seconds);
            if (timer.Elapsed>beta)
            {
                Console.Clear();
            }
            
        } while (true);
        
    }
}
е това за сега и то дори е само секунди.
Ако някой знае как да направи качествен таймер с минути и секунди или поне да не мига толкова често ще съм му благодарен :)



Отговори



0
Пробва ли с Thread.Sleep(); ? На принципа при създаване на движение при конзолните игри е, през един while(true) цикъл ще сложиш TimeSpan-a , после Console,Clear() да зачисти и отдолу Thread.Sleep(1000) за да забави това цяло движение и изпише самото време да мига през секунда.Това е грубо модела по който си го представям ,че ще стане.

от IvayloAndonov (1994 точки)


0
честно казано не съм използвал тази stopwatch функционалност, но ми идва на ума да си зададеш един while(променлива) цикъл, на който да му дадеш thread.sleep 1000 (ms = 1s) и да си увеличаваш някаква променлива с 1, ако стане по голяма от 60 вече делиш на 60 за да вземеш минутите, а остатъка е променливата %60 т.е секундите. Това ти предлагам като временно решение, естествено, че не е най-добрият вариант тъй като си има явно вградена имплементация за брояч, но със сигурност ще работи. :)

от Wasilsarandev (480 точки)


1

Това е официалния начин, със сигурност има много начини:

public void StartTimer(object o, RoutedEventArgs sender)
{
    System.Windows.Threading.DispatcherTimer myDispatcherTimer = new System.Windows.Threading.DispatcherTimer();
    myDispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 100); // 100 Milliseconds 
    myDispatcherTimer.Tick += new EventHandler(Each_Tick);
    myDispatcherTimer.Start();
}

// A variable to count with.
int i = 0;

// Raised every 100 miliseconds while the DispatcherTimer is active.
public void Each_Tick(object o, EventArgs sender)
{
    myTextBlock.Text = "Count up: " + i++.ToString();
}


от ivan.mihov1 (4988 точки)


0

Ето едно бързо решение ти си му задаваш колко време искаш:

using System;
using System.Diagnostics;
using System.Threading;

class Timer
{
    static void Main()
    {
        //хронометър
        //Stopwatch timer = new Stopwatch();
        //timer.Start();
        //do
        //{
        //    Console.WriteLine("{0}:{1}:{2}",timer.Elapsed.Minutes, timer.Elapsed.Seconds, timer.Elapsed.Milliseconds);
        //    Thread.Sleep(60);
        //    Console.Clear();
        //} while (true);

        int timerMin = 2;
        int timerSec = 60;
        do
        {
            if (timerSec==0)
            {
                Console.WriteLine("{0}:{1}", timerMin, timerSec);
                --timerMin;
                timerSec = 60;
            }
            else
            {
                Console.WriteLine("{0}:{1}", timerMin, timerSec);
            }
            --timerSec;
            if (timerSec==0 && timerMin ==0)
            {
                Console.Clear();
                Console.WriteLine("Time is over.");
                break;
            }
            Thread.Sleep(1000);
            Console.Clear();
        } while (true);
    }
}


от E.Mitev (178 точки)


0

Здравей, и аз съм на същата вълна във връзка с отборен проект :)

Пробвай така, този показва часове, минути, секунди, че и милисекунди и ticks. Ако успееш да премахнеш милисекундите, ще се радвам да споделиш как става. Повече за форматирането тук: Standard TimeSpan Format Strings:

using System;
using System.Timers;

   class myApp
   {   
public static void Main()
{
 Timer myTimer = new Timer();
 myTimer.Elapsed += new ElapsedEventHandler( DisplayTimeEvent );
 myTimer.Interval = 1000;
 myTimer.Start();

while ( Console.Read() != 'q' ) //or (true)
{
;    // do nothing...
}
        }

public static void DisplayTimeEvent( object source, ElapsedEventArgs e )
{
Console.Write("\r{0:c}", DateTime.Now);
}
}


от pavleta (507 точки)


1
Мига ти заради Console.Clear(). Прерисуваш твърде много квадратчета по този начин. Използвай Console.SetCursorPosition.

от ivaylo.kenov (30760 точки)