kilka pytań - C#

0

Witam.
Mam kilka pytań odnośnie programowania w językach C# lub VB.NET itd
No więc od jakiegoś czasu robię proste aplikacje...I napotykam często coś takiego, że jak uruchamia się jakaś funkcja w programie, to program tak jakby przestaje odpowiadać do czasu aż ukończy tę funkcję...tak jakby się "przywiesza".
Co trzeba zrobić aby program robił co swoje, ale reagował na ewentualne kolejne przyciskanie na buttony itp ?
Aby nie było efektu "przycinania się" ?

0

Poczytaj o wątkach. Program się "przycina" bo liczy więc jest zajęty. Jeśli wszystko wykonujesz w jednym wątku to musi być skończona jedna operacja aby wykonać kolejną. Operacje czasochłonne wykonuj w osobnych wątkach, dzięki temu unikniesz tego typu efektów.
Tutaj pare informacji podstawowych:
https://msdn.microsoft.com/pl-pl/library/ck8bc5c6.aspx

Ps. Kilka pytań a zadałeś tylko jedno?

0

@eL
no a jak np program się przywiesza bo wysyła zapytanie do serwera, tak jak w tym temacie:
Jak wysłać SOAP ?

To przecież program nic nie liczy...więc nie rozumiem czemu tak się zachowuje.

0

Nie liczy na zasadzie działań matematycznych ale zajmuje czas procesora (czyli de facto liczy).
Procesor wykonuje jakieś operacje. Jeśli np. w Biedronce zostanie otwarta tylko jedna kasa to wszyscy pójdą tylko i wyłącznie do tej kasy przez co będzie ona długa i każdy po kolei będzie obsługiwany. Będziesz więc stał i czekał na swoją kolej. Jeśli jednak zostanie otwarta druga, trzecia etc kasa to zadania mogą zostać podzielone. Podobnie (w dużym uproszczeniu) można opisać twój problem. Kiedy uruchamiasz aplikację, obsługiwana jest ona jednowątkowo. Każda operacja którą wykonasz (wczytywanie, pisanie, obliczanie, klikanie przycisków itp) musi być wykonana po kolei, jeden po drugiej, ponieważ obsługuje to wszystko jeden wątek. Jeśli jakaś operacja zajmuje więcej czasu (a łączenie się z serwerem jest taką akcją), to reszta wisi i czeka na swoją kolej. Tak więc mimo że wciskasz button to obsłużona akcja zostanie dopiero po zakończeniu innej operacji.

0

@eL
no okej, wydaje się to być zrozumiałe...
Natomiast wyprzedziłeś mnie z moim kolejnym pytaniem :)
Bo właśnie miałem zapytać się też o wątki...

Gdy próbuję dać to do wątku to wyskakują dziwne błędy przy operacjach związanych z textboxami
user image

działając normalnie (bez wątków) tych błędów nie ma.

0

Treść błędu chyba wszystko mówi.

Jak to wysyłanie nie robi nic ciężkiego obliczeniowo(a pewnie nie robi) to nie rób nowych wątków tylko zastosuj async/await.

0

Nie możesz z innego wątku zmienić wygląd formatki (związane z organizacją grafiki).
Patrz Invoke: https://msdn.microsoft.com/pl-pl/library/zyzhdc6b(v=vs.110).aspx
Oraz: InvokeRequered

0

poczytałem zarówno o delegate jak i o tym async i await, niestety coś ciężko mi idzie z nauką.. z tym delegate to całkiem nic nie rozumiem, natomiast await wydaje się być prostsze..
ale i tu nie rozumiem co robię źle:
user image

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