.NET 1.1 işlenmeyen İstisna İşleyici

oy
23

Ben .NET 1.1 uygulama ve ben kullanıcı herhangi düşmanca bir hata bildirimlerini görmez emin olmaktır ile görevli şeylerden biri bakımı.

Ben işleyicileri ekledik Application.ThreadExceptionve AppDomain.CurrentDomain.UnhandledExceptiondenilen alırım. Benim sorunum (istisna işleyicisi çağrılmadan önce) standart CLR hata iletişim hala görüntülenir olmasıdır.

Jeff blogunda bu soruna bahsediyor burada ve burada . Ama hiçbir çözüm var. Yani bir dost iletişim kutusu yakalanmamış istisnalar işlemek ve görüntülemek için .NET 1.1 standart yolu nedir?

O sağlanan bağlantı ne gerekliyse nasıl yapılacağı konusunda en eksiksiz bilgiye sahip olmasıdır Jeff'in tepkisi, doğru cevap olarak işaretlenmiş.

Oluştur 04/08/2008 saat 02:15
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
11

Ah, Windows Forms kesinlikle işe almak gerekir. Eğer dikkat gereken tek şey farklı parçacığı oluyor şeydir.

Ben yardımcı olmalıdır hangi burada eski Kod Proje makale var:

Kullanıcı Dostu durum işleme

Cevap 04/08/2008 saat 05:31
kaynak kullanıcı

oy
5

Windows Forms uygulaması bir .NET 1.x beklenmeyen bir durum davranışı bağlıdır:

  • istisna attı iplik türü
  • o pencere mesajı işleme sırasında meydana olsun
  • Bir hata ayıklayıcı sürecine bağlıydı olsun
  • DbgJitDebugLaunchSetting kayıt defteri ayarı
  • App.config jitDebugging bayrağı
  • İster, Windows istisna işleyicisi Forms overrode
  • Eğer CLR'nin istisna olayını ele olsun
  • Ayın faz

işlenmeyen istisna varsayılan davranışıdır:

  • Pencere mesajları pompalarken istisna ana iş parçacığı üzerinde oluşursa, Windows Forms istisna işleyicisi tarafından yakalanan oluyor.
  • Pencere mesajları pompalarken istisna ana iş parçacığı üzerinde oluşursa Windows Forms istisna işleyicisi tarafından yakalanan sürece, bu uygulama süreci sona erer.
  • istisna manuel, threadpool veya sonlandırıcıyı iş parçacığı üzerinde oluşursa, o CLR tarafından yutmuş.

istisnası için temas noktaları şunlardır:

  • , Windows istisna işleyicisi Forms.
  • JIT-ayıklama kayıt DbgJitDebugLaunchSetting geçin.
  • CLR işlenmeyen özel durum olay.

Windows formu yerleşik istisna işleme varsayılan olarak şunları yapar:

  • ne zaman işlenmeyen bir özel durum yakalar:
    • istisna ana iş parçacığı ve ekli hiçbir debugger üzerindedir.
    • İstisna pencere mesajı işleme sırasında oluşur.
    • jitDebugging = App.Config yanlış.
  • kullanıcıya iletişim gösterir ve uygulama sonlandırma önler.

Sen app.config jitDebugging = true ayarlayarak ikincisi davranışı devre dışı bırakabilir. Ama bu uygulama sonlandırma durdurmak için son şansınız olabilir unutmayın. Yani işlenmeyen bir özel durum yakalamak için bir sonraki adım olay Application.ThreadException, örneğin için kayıt edilmektedir:

Application.ThreadException += new
Threading.ThreadExceptionHandler(CatchFormsExceptions);

HKEY_LOCAL_MACHINE \ Software.NetFramework altında DbgJitDebugLaunchSetting ayarı kayıt edin. Bu farkındayım hangi üç değerden birini sahiptir:

  • 0: "hata ayıklama veya sonlandırmak" soran kullanıcı diyaloğu göstermektedir.
  • 1: başa CLR için içinden istisna sağlar.
  • 2: DbgManagedDebugger kayıt defteri anahtarında belirtilen hata ayıklayıcı başlattı.

Visual Studio, menü gidin AraçlarSeçeneklerHata ayıklamaJIT 0 veya 2 olarak bu anahtarı ayarlamak Ama 1 değeri bir son kullanıcının makinesinde genellikle en iyisidir. Bu kayıt defteri anahtarı CLR işlenmeyen özel durum olaydan önce üzerinde işlem unutmayın.

Bu son olay işlenmeyen bir özel durum oturum açmak için son şansın. senin Nihayet bloklar idam önce bu tetiklenen. Bunu aşağıdaki şekilde olayı müdahale edebilir:

AppDomain.CurrentDomain.UnhandledException += new
System.UnhandledExceptionEventHandler(CatchClrExceptions);
Cevap 20/09/2008 saat 16:52
kaynak kullanıcı

oy
4

AppDomain.UnhandledException bir olan olay değil, küresel bir istisna işleyicisi. Bu araçlar, bu yükseltilir saate göre uygulama boşa yolunda zaten olur ve temizleme ve hata günlüğü yapıyor dışında bu konuda yapabileceğiniz hiçbir şey yoktur.

Ne perde arkasında olanları şudur: çerçeve, istisna tespit çok üstüne çağrı yığını yürüdü hatadan kurtulmak olacak hiçbir işleyicileri buldum, çalışmaya devam edebileceği güvenli olup olmadığını tespit edemedi. Yani, kapatma dizisi başladı ve siz zaten mahkum sürecine saygılarını böylece size nezaketen bu etkinliği kadar ateş. Bir istisna ana iş parçacığı işlenmeyen bırakıldığında gerçekleşir.

hata bu tür tek noktalı çözüm vardır. Bu hata oluştuğunda tüm yerlerin memba gerçek istisna işleyicisi (catch bloğu) koymak ve bunu iletmek için gereken basitçe dayalı rapor ve devam etmek için güvenli olup olmadığını belirleyecek küresel bir işleyici yöntemi / sınıfı (örneğin) istisna tipi ve / veya içerik.

Düzenleme: Bu devre dışı bırakmak mümkündür (= kesmek) Windows yerleşik hata raporlama mekanizması zorunlu "çarpışma ve yanık" böylece app battığında iletişim kutusu görüntülenir almaz. Ancak, bunun için etkili olur tüm değil sadece kendi sisteminde uygulamalar.

Cevap 04/08/2008 saat 11:20
kaynak kullanıcı

oy
3

Bu bir konsol uygulaması mı yoksa Windows Forms uygulaması? Bu tasarım gereği ne yazık ki, bir .NET 1.1 konsol uygulama söz konusuysa - bu bir MSFT dev teyit ediyor size başvurulan ikinci blog post :

BTW, benim 1.1 makinede MSDN'den örnek beklenen çıkışı var; Eğer bir hata ayıklayıcı ekli (veya değil) edene kadar ikinci satır görünmüyor oluşu. görünüyor ayıklayıcı Ataşeleri'nden önce UnhandledException olayı harekete, çoğu insan beklediğiniz olmak, böylece v2 biz etrafında şeyler döndürerek ettik.

.NET 2.0 bu daha iyi (şükür) yaptığı gibi geliyor, ama dürüst olmak gerekirse, ben geri dönüp kontrol etmek için zaman yoktu.

Cevap 04/08/2008 saat 03:45
kaynak kullanıcı

oy
1

Bu bir Windows Forms uygulaması var. Application.ThreadException tarafından yakalanır istisnalar iyi çalışır, ben çirkin .NET istisna kutusunu alamadım ( OKsonlandırmak için, Cancelhata ayıklama? Uydurdum kim ??).

Bunu tarafından yakalanmış ve sorunlara neden olan AppDomain.UnhandledException olaya gidiş sona erdi duyulmadığını bazı istisnalar başlamıştı. Ben bu istisnalardan en yakaladım düşünüyorum ve şimdi bizim güzel hata kutunun içine görüntüleyen ediyorum.

Yani sadece istisnalar Application.ThreadException işleyicisi tarafından yakalanmış değil neden olacak diğer bazı durumlar vardır değildir umut gerekecek.

Cevap 04/08/2008 saat 03:54
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more