Forma, która otwiera inną formę ale nie kończy zdarzenia.

Odpowiedz Nowy wątek
2011-08-19 12:40
0

Mam następujący problem. W pierwszej formie pod przyciskiem umieściłem zadanie, które ma przeliczyć coś w bazie danych. I żeby było ładnie umieściłem na początku zadania wywołanie innej formy z treścią: "Czekaj, praca w toku..." w tym momencie powinno działać cały czas zadanie z Form1 i tu właśnie jest problem bo działanie przechodzi na tą nowo otwartą formę, a w założeniu ma być tak, że zadanie dobiega do końca w formie pierwszej gdzie po przeliczeniu powinno być coś w rodzaju Form2.Close() po czym forma2 zostaje zamknięta.
Nie mam pojęcia jak rozwiązać ten problem. Czy coś w rodzaju forma rodzic itd?

Pozostało 580 znaków

2011-08-19 12:42
0

Pokaż fragment kodu z form1

Pozostało 580 znaków

2011-08-19 12:56
0

event Click pod Buttonem w Form1:

Form2 FormaCzekaj = new Form2();
FormaCzekaj.Show();
//zadanie przeliczające w bazie....
//skończone przeliczanie
FormaCzekaj.Close();

Coś w tym stylu chodź wiem, że to bzdura bo otwiera się Form2 i sterowanie przechodzi do niej. Dopiero zamknięcie Form2 powraca do Form1.
Chodzi mi o to, żeby przekazać użytkownikowi wiadomość o tym, że program nie stoi tylko przelicza stąd ta Form2 z treścią o tym.
Nie chcę paskudzić Form1 jakimś progressBar bo tam po prostu nie pasuje.

edytowany 1x, ostatnio: tgrobi, 2011-08-19 12:57

Pozostało 580 znaków

2011-08-19 14:45
0

zadanie przeliczające w bazie zrób jako nowy wątek.


Pozostało 580 znaków

2011-08-19 14:47
0

Jest coś takiego jak status bar i progress barr.
Show() nie blokuje użycia Form1, bo to tzw. okno niemodalne. Można po pokazaniu Form2 przenieść fokus na Form1.

Pozostało 580 znaków

2011-08-19 17:00

Najprościej zrobić to w ten sposób. Wywołanie na bazie umieszczasz w innym wątku. Przed startem wątku wywołujesz metodą nowe okno. Teraz pojawia się pytanie skąd masz wiedzieć kiedy wątek skończył. Otóż może to sprawdzić na dwa sposoby. Albo nawet na trzy:D, hehehe. Jeśli masz wątek w metodzie to po starcie robisz pętle while i sprawdzasz sobie czy wątek jest uruchomiony. Jeśli tak to wątek główny niech czeka sobie:). Druga opcja to użycie dalegaty lub zdarzenia. W wątku, który wykonuje zapytanie do bazy, po wykonaniu zapytania wywołujesz sobie delegata lub zdarzenie:). Trzecie opcja to używanie delegat asynchronicznych. Na codeguru możesz znaleŹć piękny artykuł o tym. Spróbuj trochę poszperać jak Ci się nie uda podeślę Ci jakiś przykładowy kod

edytowany 2x, ostatnio: duke1985, 2011-08-19 17:05

Pozostało 580 znaków

2011-08-19 20:34
0

duke1985 o to właśnie chodzi. Trochę jeszcze zacząłem czytać i właśnie o wątki tutaj się rozchodzi. Dzięki za pomoc.

Dla zainteresowanych, temat już był:
http://4programmers.net/Forum/Ci.NET/145415-Forma_z_informacja_w_watku

edytowany 1x, ostatnio: tgrobi, 2011-08-20 00:02

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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