Lehet valamivel helyettesíteni a do while-t?
Szolgáltatásként lehet megírni, amit akarsz:
Kérdező, bocsi, de ez a polling lehető legcsúnyább és legfeleslegesebb alkalmazása. Ezen még a külön szál sem sokat segít, mert akkor is feleslegesen dolgozik a gép a háttérben.
A főkérdésre válaszolva, úgy keress rá, hogy pl. 'c# job scheduling'.
Hát ez szörnyű.
Az utolsó 4-5 hsz le is írja, hogy miért.
A service-ek írása neked még sok lenne, ha ezzel is így vergődsz. A timer lesz a megoldás a problémádra, és akkor el is felejtheted a (bűnronda) loop-odat.
az időt meg elég /talán/ 1 secundumonként is lekérdezni, a feltétel pedig, ahogy Tabaki is írja, nem == hanem >= kell legyen.
#18: „nem == hanem >= kell legyen”
Félretéve, hogy a programod egyébként is használhatatlan, #18 javaslata sem működik benne, ugyanis az időt, meglepő ötlettel, stringként kérdezed le. Ha a feltételt így módosítom:
if (idő >= "16:00")
...a fordító nem fogadja el:
error CS0019: Operator `>=' cannot be applied to operands of type `string' and `string'
Ha viszont ehelyett közvetlenül az óra integer-értékét vizsgálnád, akkor működne is, meg az idő változó is fölöslegessé válna, pl.:
if (DateTime.Now.Hour >= 16) {stb.}
vagy csak:
if (DateTime.Now.Hour > 15) {stb.}
Természetesen megeshet, hogy mégsem kerek órakor akarod akarsz akciózni, hanem mondjuk 16 óra 24 perckor. Ekkor megint szerepet kaphatna egy időpontot rögzítő objektum, de az hadd ne legyen már string, hanem értelemszerűen maga is DateTime. Ekkor a ciklusod kb. így nézne ki (a teendők sorát az áttekinthetőség kedvéért engedelmeddel a Lekapcsolas() hivatkozásra cseréltem, mintha egy ilyen nevű metódusba lennének téve):
DateTime ido;
bool fut = true;
do{
ido = DateTime.Now;
if (ido.Hour > 15 && ido.Minute > 23) {
Lekapcsolas();
fut = false;
}
} while (fut);
Az aktuális időpontnak az ido-be másolása biztosítaná, hogy az óra és perc kettős vizsgálata közben már ne történhessen változás. Szükség esetén akár a másodperceket vagy ezredmásodperceket is figyelhetnéd ugyanígy (ido.Second, illetve ido.Millisecond), de még egyszer: Mindezt nem azért írtam, mintha ebben a formájában bármi módon is megoldaná, amit akarsz. Szándékom szerint ez csak az általad bemutatott eleve értelmetlen ciklusnak a valamivel megfontoltabb újrafogalmazása, hátha így is akad valamikor-valamire még használható eleme.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!