wyskakujące okienka podczas wywołania metody thread.abort() i thread.interrupt()

0

Witajcie,

czy może mi ktoś poradzić jak pozbyć się wyskakiwania okienek z komunikatami wyjątków, które wyskakują mi podczas wywołania funkcji thread.abort() lub thread.interrupt().
Chcę po prostu przerwać w wybranym przez użytkownika momencie działanie wątku i wyskakują mi te cholerne okienka :(
Pomożecie?

0

przechwyć wyjątek, w bloku catch nic nie rób:

try
{
...
}catch(ThreadAbortException exc)
{
 // do nothing
}
0

Nic to nie daje. Mam tak:

UserControl1 us = ctrl as UserControl1;
                        try
                        {
                            us.newThread.Abort();
                        }
                        catch (ThreadAbortException ex)
                        {
                            //MessageBox.Show("Błąd zatrzymania wątku");
                        }

Gdy zastosuje metodę Abort() to wyskakuje mi okienko z komuniaktem: "Trwało przerywanie wątku", natomiast gdy dam interrupt() to wtedy mam komunikat: "stan oczekiwania wątku został przerwany". WTF???

1

try { } catch musi być w metodach wątku, nie kodzie wywołującym abort.

0

Dzięki - działa :)

0

Tak, to bardzo dobry sposób. Zapewne dostarczy w przyszłości wielu godzin rozrywki polegającej na debugowaniu.

0
somekind napisał(a)

Tak, to bardzo dobry sposób. Zapewne dostarczy w przyszłości wielu godzin rozrywki polegającej na debugowaniu.

masz lepszy pomysł? chyba celem było uniknięcie wyskakiwania wyjątków? chętnie poznam rozwinięcie Twojej myśli

1

trzeba dojść DLACZEGO błędy wyskakują a nie zamiatać je pod dywan

0
blady napisał(a)

masz lepszy pomysł? chyba celem było uniknięcie wyskakiwania wyjątków? chętnie poznam rozwinięcie Twojej myśli

Ależ poznasz je, gdy zaczniesz rzucać mięsem próbując dojść czemu Twój program działa raz tak, raz inaczej, a czasami w ogóle nie działa. ;)

W każdym razie polecam lekturę:
http://stackoverflow.com/questions/421389/is-this-thread-abort-normal-and-safe
http://stackoverflow.com/questions/1051838/killing-a-thread-c

Thread.Abort() jest niepewne, niebezpieczne i złe.

0
somekind napisał(a)
blady napisał(a)

masz lepszy pomysł? chyba celem było uniknięcie wyskakiwania wyjątków? chętnie poznam rozwinięcie Twojej myśli

Ależ poznasz je, gdy zaczniesz rzucać mięsem próbując dojść czemu Twój program działa raz tak, raz inaczej, a czasami w ogóle nie działa. ;)

W każdym razie polecam lekturę:
http://stackoverflow.com/questions/421389/is-this-thread-abort-normal-and-safe
http://stackoverflow.com/questions/1051838/killing-a-thread-c

Thread.Abort() jest niepewne, niebezpieczne i złe.

przekonałeś mnie
pzdr

1

ThreadAbortException jest akurat specjalnym wątkiem, który CLR traktuje troszkę inaczej (automatyczny re-throw w sekcji catch).

Jeśli chcesz przerwać wątek nie musisz od razu walić .Abort() z armaty - wystarczy zwykły AutoResetEvent, albo nawet pole typu bool :)

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