Obsługa wyjątków - efekt "Brak odpowiedzi" programu, można tego efektu uniknąć ?

Odpowiedz Nowy wątek
2020-02-12 11:07

Rejestracja: 2 tygodnie temu

Ostatnio: 1 tydzień temu

0

w C# jestem mocno zielony.

Mam program, który łączy się z maszyną ( krawędziarka).
Udało mi się dojść do tego momentu, że jak program traci połączenie z maszyną ( wyłączona, bądź zanik sieci), to się nie wyłącza, lecz Przywiesza ( Brak odpowiedzi ) i odwiesza gdy połączenie wraca ( obsługa wyjątków - ponowna próba połączenia z 10s Thread sleepem. ). Czy jest możliwość, aby program sie nie zawieszał, tylko pracował sobie w tle i miał brak efektu "Brak odpowiedzi" ? Program nie zawiera żadnych elementów do podejmowania działań - czysto statystyczny programik do przechwytywania sygnałów z maszyny, więc nic nie byłoby wykonywane w trakcie prób odnowienia połączenia. Istnieje taki sposób ?

Visual studio, a może : czy wystarczy odchaczyć wszystko w : Ustawienia wyjątków - przerwij w przypadku zgłoszenia ?

edytowany 2x, ostatnio: TomaszC283, 2020-02-12 11:09
Nie wystarczy. To dotyczy tylko debugowania. - AnyKtokolwiek 2020-02-12 12:27

Pozostało 580 znaków

2020-02-12 11:23

Rejestracja: 8 lat temu

Ostatnio: 23 minuty temu

2

Łącz się z maszyną w osobnym wątku zamiast w wątku z UI. Wtedy nawet jak tam będziesz czekać na coś to UI będzie cały czas "dawał oznaki życia". Bo teraz jak robisz Thread.Sleep to całe okno blokujesz na 10sek i system myśli, że coś poszło nie tak.
A z drugiego wątku nadal możesz aktualizować kontrolki w oknie.


Wszystkie miejsca, w których mnie znajdziesz w internecie: https://codewin.pl
Ekologiczne podejście do aplikacji? Dołącz do mojej przyszłorocznej inicjatywy: https://ekoapps.pl
edytowany 1x, ostatnio: mar-ek1, 2020-02-12 11:24

Pozostało 580 znaków

2020-02-12 11:30

Rejestracja: 2 tygodnie temu

Ostatnio: 1 tydzień temu

0

Ma to jakiś sens, dziękuję :-) musze zobaczyć jak się tworzy osobny wątek, bo narazie mam osobną metodę, a w c# jak mówilem, jestem zielonkawy :D ( w Javie bym zrobił osobną klasę do tego :) )

Pozostało 580 znaków

2020-02-12 18:52
Moderator

Rejestracja: 17 lat temu

Ostatnio: 17 minut temu

2

w Javie bym zrobił osobną klasę do tego :) )

W C# podobnie ;) Ale ogólnie to raczej googlaj pod hasłem Task, Taski są wygodniejsze w użyciu niż surowe wątki.

Pozostało 580 znaków

2020-02-13 07:47

Rejestracja: 2 tygodnie temu

Ostatnio: 1 tydzień temu

0

Czy Taski można w prosty sposób zakończyć, gdy wyłączy się okno główne ?
Mam z tym problem obecnie :D

Pozostało 580 znaków

2020-02-13 09:39

Rejestracja: 2 lata temu

Ostatnio: 3 godziny temu

Przekazujesz token i wywołujesz metode Cancel lub ustawiasz sobie czasowo, kiedy ma się zakończyć

  tokenSource.CancelAfter(TimeSpan.FromSeconds(3));

Przykład

        var tokenSource = new CancellationTokenSource();
            Task.Run(async () =>
              {
                  while (true)
                  {
                      await Task.Delay(100);
                      Console.WriteLine("task working");
                      if (tokenSource.IsCancellationRequested)
                      {
                          Console.WriteLine("task canceled");
                          break;
                      }
                  }
              }, tokenSource.Token);            
            Thread.Sleep(3000);
            tokenSource.Cancel();

Lubię miodek :)

Pozostało 580 znaków

Odpowiedz

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