Wyjscie z petli nacisnieciem klawisza

Zobacz poprzedni temat Zobacz następny temat Go down

Wyjscie z petli nacisnieciem klawisza

Pisanie by Fores on Sob Paź 05, 2013 8:55 pm

Witam,
Jako, ze Madagaskar obecnie jest w fazie projektu szkoleniowego, potrzebuje malej porady.

Mam taki kod:
Kod:
while(true)
{
Console.Write(1);
}
Wiecie moze jak zrobic, by program sie zatrzymal / wylaczyl po nacisniecia klawisza ESC?

Wpadlem na cos takiego:
Kod:
while(Console.ReadKey().Key != ConsoleKey.Escape;)
{
Console.Write(1);
}
Lecz nie rozwiazuje to mojego problemu, gdyz chcialbym, aby petla wykonywala sie bez przerwy, az do momentu, gdy nacisne dany klawisz.
avatar
Fores

Liczba postów : 73
Join date : 30/05/2013
Age : 26
Skąd : Katowice

Zobacz profil autora

Powrót do góry Go down

Re: Wyjscie z petli nacisnieciem klawisza

Pisanie by Fitter on Nie Paź 06, 2013 9:15 pm

Wybacz, że nie napiszę mojego pomysłu w C#, ale nie mam teraz czasu na włączenie IDE i testowanie. Pomysł przedstawię jako pseudokod:
Kod:

while(true)
{
      if(wciśniętoKlawiszEscape == true)
                          break;

      // to co chcesz robić w tej pętli
}
Tak na szybko, to bym to właśnie rozwiązał w taki sposób. Nie jestem na 1000% pewien, że jest poprawny.

Fitter

Liczba postów : 12
Join date : 26/06/2013

Zobacz profil autora

Powrót do góry Go down

Re: Wyjscie z petli nacisnieciem klawisza

Pisanie by Fores on Nie Paź 06, 2013 9:51 pm

Udalo mi sie to zrobic, ale troche sie to skomplikowalo.

Wykorzystalem klase Keyboard i jej metode IsKeyDown. Lecz, aby skorzystac z tej klasy musialem dodac PresentationCore.dll. Metoda ta jednak wymagala jako parametr enum Key, ktory zas jest w pakiecie WindowsBase.dll
Dodatkowo musialem dodac do funkcji main atrybut [STAThread]

Kod:
while(true)
{
     Console.Write(1);
     if (Keyboard.IsKeyDown(Key.Escape))
         break;
}
Program dziala, ale czy nie ma innego sposobu, aby cos takiego zrobic? Dodanie dwoch .dll dla takiej glupoty chyba nie jest zbyt optymalne? Rozumiem, ze w Window Forms / WPF, bedzie dzialac to bez problemu, bo opieraja sie na tych .dll, ale na Console nie znalazlem nic podobnego.
avatar
Fores

Liczba postów : 73
Join date : 30/05/2013
Age : 26
Skąd : Katowice

Zobacz profil autora

Powrót do góry Go down

Re: Wyjscie z petli nacisnieciem klawisza

Pisanie by koszmarek on Pon Paź 07, 2013 3:55 pm

@Fores napisał:Mam taki kod:
Kod:
while(true)
{
Console.Write(1);
}
Wiecie moze jak zrobic, by program sie zatrzymal / wylaczyl po nacisniecia klawisza ESC?
Wpadlem na cos takiego:
Kod:
while(Console.ReadKey().Key != ConsoleKey.Escape;)
{
Console.Write(1);
}
Lecz nie rozwiazuje to mojego problemu, gdyz chcialbym, aby petla wykonywala sie bez przerwy, az do momentu, gdy nacisne dany klawisz.
Nie wiem, czy to najlepsze rozwiązanie, ale spróbój tego:
Kod:
int i = 1;
while (true)
{
  if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape)
    break;
  Console.WriteLine(i++);
}
Więcej szczegółów tu: 
http://social.msdn.microsoft.com/Forums/en-US/d5e0ead0-0357-43b8-bda3-b08d074f7b61/stop-a-infinite-loop-at-any-moment-when-pressing-esc?forum=csharplanguage
avatar
koszmarek
Lider grupy "Madagaskar"
Lider grupy

Liczba postów : 596
Join date : 25/10/2012

Zobacz profil autora

Powrót do góry Go down

Re: Wyjscie z petli nacisnieciem klawisza

Pisanie by Fores on Pon Paź 07, 2013 9:27 pm

Wlasnie o cos takiego mi chodzilo Smile Dziala dokladnie tak, jak chcialem i bez zbednych komplikacji z dodawaniem .dll czy namespace'ow. Dzieki Smile
avatar
Fores

Liczba postów : 73
Join date : 30/05/2013
Age : 26
Skąd : Katowice

Zobacz profil autora

Powrót do góry Go down

Re: Wyjscie z petli nacisnieciem klawisza

Pisanie by Sponsored content


Sponsored content


Powrót do góry Go down

Zobacz poprzedni temat Zobacz następny temat Powrót do góry


 
Permissions in this forum:
Nie możesz odpowiadać w tematach