2016-04-06 16 views
1

Uygulamalarımdan birinde katı seçeneği açmaya karar verdim. Ve hayatım boyunca küçük bir kod derlemesinin nasıl yapılacağını anlayamadım. Bir modülde ben etrafa ve dedim olayını işleyerek işe aldım ApplicationEvents koyarak hakkında başka bir yazı gördükten sonra kodİşlenmeyen özel durumlar kararını yanıtlama

Sub Main() 
     AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf CurrentDomain_UnhandledException 
    End Sub 
    Private Sub CurrentDomain_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs) 
     e.ExitApplication = False 
    End Sub 

bu biraz vardı.

  • Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs: Burada

    Partial Friend Class MyApplication 
        Private Sub MyApplication_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs) Handles Me.UnhandledException 
         e.ExitApplication = False 
         AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf CurrentDomain_UnhandledException 
        End Sub 
    
        Private Sub CurrentDomain_UnhandledException(sender As Object, e As System.UnhandledExceptionEventArgs) 
         e.ExitApplication = False 
        End Sub 
    End Class 
    

    hem bağlantısıdır: onun aynı sınıf adı ancak farklı ad Böylece meraktan dışarı ben AddHandler ve aynı sınıfa taşınmaya karar verdi ve sonra netleşti

  • System.UnhandledExceptionEventArgs

benim soru hangisinin kullanmanız gereken? Uygulamanın kapatılmasını engellemek istiyorum ... ama her iki seçenek istediğim gibi görünüyor.

+0

İkinci kod bloğunuzda, 'AddHandler'ı' MyApplication_UnhandledException' işlevinde istemediğinizi sanmıyorum - bu pek anlamlı değil. (VB) işleyicisinin ilk çağrılacağından ve "CurrentDomain.UnhandledException" işleyicisinin ikinci olacağını düşündüğümden bu işe yarayabilir, ancak çok anlamlı değil. –

+1

e.ExitApplication öğesini False olarak ayarlamak hiçbir şey gerçekleştirmez. Bu 11 yıl önce çalışmayı bıraktı, rahatsız etme. –

+0

@StuartWhitehouse Sıkı davrandığımda sorunun başını çektiğini düşünmüş olabilirsiniz. Bugüne kadar bu kod 3 yıldan beri mutlu bir şekilde çalışıyor. Dürüst olmak gerekirse şimdi işe yaradığını şaşırdım. Yukarıda yayınlanan kod çok açık bir şekilde derleyici hatasını gösterir ve kod tabanımda bu süre boyunca ne olduğunu gösterme amacını taşımamaktadır ... Kızgın değilim ya da herhangi bir şey (bu nasıl okunduğuna rağmen) sadece burada ve Cevapta gösterdiğim kodun işe yarayacağı belirtildi. : Biliyorum, derleyici de bana –

cevap

1

System.UnhandledException, bir ExitApplication üyesine sahip değil (bağlandığınız belgelere bakın), bu nedenle uygulamanın çıkmasını durdurmak için kullanılamaz - bu uygulama çağrıldığında her zaman sona erdirilir. Genel olarak, Microsoft.VisualBasic ad alanı, VB'nin yardımcıları olup, başka bir yerde daha fazla veya daha az yinelenen işlevselliğe sahiptir. VisualBasic işleyicisine en yakın eşdeğer, bunun yerine Application.ThreadException biridir. Bu ve AppDomain.CurrentDomain.UnhandledException her ikisi de MS docs'da oldukça iyi tanımlanmıştır. Uygulamanın VisualBasic birini veya ThreadException birini kapatmasını engellemek için kullanılabilir. Yaptığınız işe benzer bir şey elde etmek için geçmişte Microsoft.VisualBasic birini kullandım.

+0

söyledi, 'System.UnhandledExceptionEventArgs'' ExitApplication' içermediğini biliyorum Visual Studio'nun bana Sub eklemek için söyledim, ApplicationEvents üzerine taşıdığım kod sadece AddHandler oldu prepended 'System.' ve UnhandledExceptionEventArgs'ın iki farklı sürümünü fark ettiğimde. Ne yaptıklarını bilmeden kopya yapıştırma kodu ile sorunu göstermek için gider: D –

İlgili konular