2011-01-30 17 views
5

Uygulamamda arka plan iş parçacıkları var. İş parçacıklarından biri, tüm CLR çıkışlarını ele almayan bir istisna aldığında.CLR, bir iş parçacığı almadı unhandled istisna

Normal davranış mı, yoksa CLR'deki bir hata mı?

İş parçacığının çıkacağını beklerdim, ancak CLR çalışmaya devam eder.

cevap

0

Bu normal bir davranıştır. Belki de uygulamanın çıkmasını önlemek için istisnayı yakalamak istersiniz.

1

evet normaldir ve daha fazla ayrıntı için bu benzer question'u görebilirsiniz.

1

Bu, CLR'nin v2.0'dan gelen normal bir davranıştır. İşte bu bir MSDN dir. Sonlandırma işleminden kaçınmak için, bu gibi bir şey kullanamazsınız. Bu,

<legacyUnhandledExceptionPolicy enabled="1"/> 

.

4

Beklenmedik davranışınız 1.1'de geri plandaydı. Genel olarak kötü bir fikir olduğu düşünülüyordu. Herhangi bir iş parçacığında işlenmeyen bir özel durum olduğunda, işleminiz tutarsız bir durumda bırakılabilir. Paylaşılan verilere Güncellemeler kısmen çalışma zamanı güvenle bu senaryoyu ele almak istiyorum nasıl biliyor hatta bu senaryoyu ele veya bilgi yok vs. uygulanabilir, böylece kendi seçimi parçacığı sonlandırma ve programınızı bırakarak anlamına geleceği garip bir durum. Bu, kaynak sızıntılarına, asılı kalmaya, veri bozulmasına, vb. Yol açabilir. İşlenmeyen bir istisna olarak verilen süreci sonlandırarak, tam olarak ne olduğunu bilerek, süreç sona erer. .NET uygulamalarında

7

varsayılan davranış işlenmeyen bir özel durum oluştuğunda çıkmak etmektir. Bir istisna işlenmediğinde, program bilinmeyen ve muhtemelen kararsız durumdadır. Sadece bir arka plan iş parçacığında olduğu için hatanın programın geri kalanını etkilemeyeceği anlamına gelmez. Bu durumda çalışma zamanı için en ihtiyatlı kurs, programı terk etmektir.

Sen özel duruma yakalamak ve buna göre tepki izin verecek olan AppDomain.CurrentDomain.UnhandledException içine görünebilir. Daha iyi bir çözüm bir try...catch ile iplik proc akıtmaktır. Ancak yalnızca, nasıl ele alınacağını bildiği istisnaları halledin. Bunu yapmak: Eğer gerçekten ana programa dağıtılmasını istiyoruz istisnalar maske çünkü

void MyThreadProc() 
{ 
    try 
    { 
     // ... 
    } 
    catch 
    { 
     // handle all exceptions 
     // This is a BAD idea 
    } 
} 

, gerçekten kötü bir fikir mi.

İlgili konular