Wyłącznik czasowy komputera C#

0

próbuję zrobić wyłącznik czasowy komputera w Visual Studio.
w c++ konsolowo wystarczylo wywolac sleep(1000) i wyszstko dzialalo, natomiast w C# uzycie System.Threading.Thread.Sleep(1000) sprawia ze program sie zupelnie zawiesza, lub nie reaguje. dla przykladu uzywajac System.Threading.Thread.Sleep(0) jest ok, ale jesli czas wynosi wiecej niz 0 to programik się sypie.
prosze o pomoc jak to rozwiazac

0

jeśli chcesz wyłączyć kompa o konkretnej godzinie to wrzuć na formę timer, ustaw mu Interval na np. 500 (0.5 sekundy) a w obsłudze Tick sprawdzaj czy czas bieżący jest taki sam jak czas wyłączenia i jak tak to uruchom kod od wyłączenia.

0
abrakadaber napisał(a):

jeśli chcesz wyłączyć kompa o konkretnej godzinie to wrzuć na formę timer, ustaw mu Interval na np. 500 (0.5 sekundy) a w obsłudze Tick sprawdzaj czy czas bieżący jest taki sam jak czas wyłączenia i jak tak to uruchom kod od wyłączenia.

Do takich zastosowań w zupełności wystarczy 1000. Tylko nie sprawdzaj, czy czas jest identyczny. Czas na kompie ma być równy lub większy z tym zadanym.

0

A może uruchomić timer w osobnym wątku i wtedy nie będzie zawieszało GUI.

0
async static Task PutTaskDelay(int i)
{
    await Task.Delay(i);
}

Przykład:

        async static Task PutTaskDelay(int i)
        {
            await Task.Delay(i);
            Console.WriteLine("delay");
        }
        static void Main(string[] args)
        {
            for (int i=0; i<5; i++)
            {
                Console.WriteLine("test");
                PutTaskDelay(500); 
            }
            Console.WriteLine("koniec");
            Console.ReadKey();
        }
test
test
test
test
test
koniec
delay
delay
delay
delay
delay

Shutdown:

        async static Task ShutdownWithCountDown(int i)
        {
            await Task.Delay(i);

            Process cmd = new Process();
            cmd.StartInfo.FileName = "cmd.exe";
            cmd.StartInfo.RedirectStandardInput = true;
            cmd.StartInfo.RedirectStandardOutput = true;
            cmd.StartInfo.CreateNoWindow = true;
            cmd.StartInfo.UseShellExecute = false;
            cmd.Start();

            cmd.StandardInput.WriteLine("shutdown /s /t 0");
            cmd.StandardInput.Flush();
            cmd.StandardInput.Close();
            cmd.WaitForExit();
        }
        static void Main(string[] args)
        {
            ShutdownWithCountDown(5000);
            Console.ReadLine(); /// żeby program się nie skończył przed upływem czasu.
        }
0

dzięki wielkie za podpowiedzi. jest ktoś w stanie wytłumaczyc dlaczego moja metoda zwiesza działanie ? prosze tez o dokladniejsza instrukcje jak wykorzystac ** Inteval**.
chce w programie wpisać np. 120minut, nie konkretna godzinę np. 16:30

0

Kolego "WeiXiao" - bardzo mi pomogłeś, dziękuję za jasno zobrazowane rozwiązanie problemu. Niezły skill, tylko pozazdrościć :)

0

wyrzuca błąd:
await Task.Delay(i); // 'Task' does not contain a definition for 'Delay'.

oczywiście jest "using System.Threading.Tasks;"

0
Wybitny Pomidor napisał(a):

wyrzuca błąd:
await Task.Delay(i); // 'Task' does not contain a definition for 'Delay'.

oczywiście jest "using System.Threading.Tasks;"

Naciśnij (w Visual Studio) prawym na projekt > Properties > Application > Target Framework > I ustaw na .NET Framework 4.5 lub wyższy

Ewentualnie

https://stackoverflow.com/questions/17717047/system-threading-task-does-not-contain-definition/17717159

0

znacznie prostsze jest uzycie komendy "Process.Start("Shutdown", "/s /t 0");"

1 użytkowników online, w tym zalogowanych: 0, gości: 1