Jak stworzyć okienko modalne jako wątek z komunikacją?

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
Awatar użytkownika
ky3orr
Posty: 149
Rejestracja: 10 gru 2006 00:00
Wersja środowiska: LabVIEW 8.6
Lokalizacja: Siechnice
Kontakt:

Jak stworzyć okienko modalne jako wątek z komunikacją?

Post autor: ky3orr »

Witam wszystkich,

mam taki oto problem...
Piszę aplikację, która przerzuca dużo danych pomiędzy bazą MySQL, a RAMem i robi spore obliczenia.
Do tej pory po wciśnięciu przycisku, który powodował uruchomienie odbierania i przeliczania dużej partii danych ustawiałem jego wartość Disabled na 2 i był spokój. Klient nie naklikał mi ani razu dopóki nie zakończyło się zadanie.
Teraz odpalam wszystko w eventach i gdy dam Disabled na 2 to i tak po zakończeniu importu, gdy Disabled idzie na 0 zostaje ponownie wywołana uciążliwa operacja, gdy Klient kliknął wcześniej w nieaktywny guzik.

Pomysł jest taki, aby na czas wszystkich ciężkich operacji pokazać jakieś okienko modalne, jakiś wait frame, (żeby nie dało się nic grzebać na panelu głównym aplikacji) z jakimś paskiem zajętości i etykietą tekstową, której zawartość może być na bieżąco aktualizowana przez aplikację. Tak samo powinna być możliwość wysłania do okienka sygnału, że może się już zamknąć.

Myślałem nad jakimś wątkiem, który pracuje do czasu gdy jakieś inne zdarzenie jest w toku.
Jak to się robi?
Czy ktoś wykonywał już coś podobnego?

pozdrawiam
KY3ORR

Okablowanie audio / RF -> www.CabLAB.eu
Awatar użytkownika
coolfon
Posty: 232
Rejestracja: 01 gru 2007 08:59
Wersja środowiska: LabVIEW 2009
Kontakt:

Re: Jak stworzyć okienko modalne jako wątek z komunikacją?

Post autor: coolfon »

Czy dobrze się domyślam, że na tym nieszczęsnym przycisku wywołujesz event Mouse Up (ew. Down...)? W takim przypadku modyfikowanie własności Disabled nie ma znaczenia, przycisk tam jest i da się nad nim kliknąć ;)

Proponuję zmienić event na Value Change. Powinno to działać bardziej po Twojej myśłi. Gdy ustawisz Disabled na 2, nie da się wywołać Value Change, przez co klikanie nie będzie kolejkowane. Rzuć okiem na załączony przeze mnie przykład (sorry za bałagan, chwilowo korzystam z touchpad'a ;) )
disable_for_events.vi
(10.13 KiB) Pobrany 503 razy
Awatar użytkownika
ky3orr
Posty: 149
Rejestracja: 10 gru 2006 00:00
Wersja środowiska: LabVIEW 8.6
Lokalizacja: Siechnice
Kontakt:

Jak stworzyć okienko modalne jako wątek z komunikacją?

Post autor: ky3orr »

Dzięki za odpowiedź coolfon.

Akurat korzystam z Value Change i nie mam pojęcia dla czego jak kliknę w button gdy jest disabled to jak się zmieni na enabled to leci event... Może coś pokaszaniłem.

Stworzyłem sobie małego dialoga, który chcę wywołać jakoś w programie, aby pojawiał się jako modal, ale by aplikacja pod spodem dalej działała. Za pomocą notifiera np. chcę przesyłać komunikaty do wyświetlenia na string indykatorze (np. pobieranie danych, przetwarzanie itd.) + specjalny kod który zamknie dialoga.
Jak to zrobić?

taki patent skutecznie uniemozliwi dostęp do panelu poniżej i nie będę muysiał kombinować z blookowaniem przycisków.
KY3ORR

Okablowanie audio / RF -> www.CabLAB.eu
Awatar użytkownika
coolfon
Posty: 232
Rejestracja: 01 gru 2007 08:59
Wersja środowiska: LabVIEW 2009
Kontakt:

Re: Jak stworzyć okienko modalne jako wątek z komunikacją?

Post autor: coolfon »

Kombinowaniem będzie właśnie tworzenie dodatkowych vi, komunikacji z nimi itp... Wrzuć swój kod, albo chociaż kawałek z Eventem. Znajdziemy błąd i problem z głowy.
Awatar użytkownika
ky3orr
Posty: 149
Rejestracja: 10 gru 2006 00:00
Wersja środowiska: LabVIEW 8.6
Lokalizacja: Siechnice
Kontakt:

Re: Jak stworzyć okienko modalne jako wątek z komunikacją?

Post autor: ky3orr »

Postanowiłem nie przynudzać z kodem, bo aby aplikacja wystartowała musiałbym usunąć sporo kodu :)

Podam jednak rozwiązanie - protezę - które udało mi się wykonać po przeglądnięciu kilku tematów na LAVIE.

To co udało się stworzyć to pojawiające się okienko z informacją o przetwarzaniu danych i dwa jeżdżące status bary.
Rozwiązało to mój problem na tyle, że Klient nie naklika mi niczego gdy aplikacja zajęta jest odczytem i przetwarzaniem dużej porcji danych, a w dodatku widzi, że program się nie zwiesił i coś się dzieje.

Kod wywołania VIaja i efekt działania na poniższych rysunkach.

Dalej jednak nie uporałem się z przekazywaniem danych do takiego otwartego i działającego VIaja, żeby na przykład zmienić tekst o przetwarzaniu danych na dowolny inny w dowolnym czasie.
Widziałem implementację uruchamiającą VI z User Eventem i jakoś działało to tak, że program wywołujący zmieniał wpis swojej kontrolki i to samo działo się w tym nowo otwartym okienku...
magia...

za wszelkie pomysły i krytykę z góry dziękuję

pozdrawiam
Załączniki
open_vi_reference.jpg
open_vi_effect.jpg
KY3ORR

Okablowanie audio / RF -> www.CabLAB.eu
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: Jak stworzyć okienko modalne jako wątek z komunikacją?

Post autor: Pitol »

Jak już korzystasz z referencji do okna dialogowego to możesz gdzieś sobie upchnąć metodę ControlValue.Set. Podajesz tylko nazwę kontrolki i jej nową wartość w postaci Variant.
Coś w ten deseń...
dialog.PNG
Mógłbyś to również zrobić na kolejkach. Wystarczy, że w obu VI (Dialog i główny) zadeklarujesz kolejkę o tej samej nazwie. W głównym VI będziesz pakował do kolejki a w Dialogu odbierał z kolejki informacje.
M.PNG
S.PNG
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Awatar użytkownika
ky3orr
Posty: 149
Rejestracja: 10 gru 2006 00:00
Wersja środowiska: LabVIEW 8.6
Lokalizacja: Siechnice
Kontakt:

Re: Jak stworzyć okienko modalne jako wątek z komunikacją?

Post autor: ky3orr »

Dzięki Pitol!

to się nazywa rzeczowa podpowiedź :)

pozdrawiam
KY3ORR

Okablowanie audio / RF -> www.CabLAB.eu
ODPOWIEDZ