[ Maki ^^ @ 13.07.2009. 19:28 ] @
Ne znam je li neko imao slican problem... Jezik je C#. Imam metod koji se izvrsava donekle, a onda treba da ceka da korisnik unese podatke na glavnoj formi pre nego sto nastavi sa izvrsavanjem. Kako to izvesti? |
[ Maki ^^ @ 13.07.2009. 19:28 ] @
[ Sapphire @ 14.07.2009. 00:27 ] @
Vjerovatno zavisi od više faktora...
Ti u biti želiš da se kod izvršava do jedne tačke, i onda "stane". Ako bi ovo uradio u programu na bilo koji način koji se trenutno mogu sjetiti, bilo bi prilično neefikasno, naopako i neelegantno urađeno. Npr, možeš postaviti neku bool varijablu, i if uslov u metodi koji prema uslovu grana posao na onaj prije interakcije i poslije; pa kad se prilikom interakcije odradi što želiš, pozoveš istu metodu sa prethodno postavljenom varijablom na true. Ipak, logično gledajući, koji god da posao radiš - nema baš smisla da neka metoda ide do jedne tačke i stane, osim ako se ne radi o stvarno dugačkoj i vremenski zahtjevnoj metodi. U ovome slučaju, koristi niti. Metodu pozovi iz nove niti, te onda vrlo elegantno pomoću EventWaitHandle-ova možeš komunicirati između glavne UI niti i ove posebne niti u slučaju dodatne potrebne korisničke interakcije. Pokušaj razdvojiti metodu na dvije, pa nakon interakcije pozovi drugu; a pri kraju prve zapamti sve potrebne podatke u varijable. Možda, ako se radi o vrlo kratkoj i brzoj metodi, možeš i metodu pozvati nakon interakcije Imaš mnogo rješenja za ovo... [ DarkMan @ 14.07.2009. 13:14 ] @
Moras koristiti metode koje blokiraju izvrsavanje koda, kao sto je na primer metoda ShowDialog.
Code: public bool NekaMetoda() { // neki tvoj kod koji se izvrsava Form1 dialog = new Form1(); if(dialog.ShowDialog() == DialogResult.OK) { // preuzmi podatke iz forme int value1 = dialog.Value1; dialog.Dispose(); // nastavi obradu return true; } return false; } [ Maki ^^ @ 18.07.2009. 19:12 ] @
Hvala na odgovorima. Bilo je korisno videti koje su mi opcije na raspolaganju u ovakvim situacijama, iako mi vecina predlozenih resenja zbog ovoga ili onoga nije odgovarala.
Pravio sam aplikaciju koja nece biti deo konacne verzije programa i koja sluzi za testiranje nekog koda koji sam napravio pre toga. Snasao sam se na sledeci nacin: Code: public bool korisnik_uneo_podatke = false; public bool NekaMetoda() { // Deo pre interakcije korisnika do { Application.DoEvents(); } while (!korisnik_uneo_podatke) // Deo posle interakcije korisnika } Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|