Degeim Skrevet 30. mai 2008 Del Skrevet 30. mai 2008 Hei! Dersom (les: når) programmet mitt krasjer på andre maskiner enn min egen, ønsker jeg å ha en form som minner om Microsoft sin, dvs en som lar brukeren trykke på en knapp og sende litt informasjon om feilen til meg. I mine gamle VB-dager var det ganske enkelt; jeg bare valgte det programinnstillingene hva som skulle skje ved unhandled exception, og vips så funket det. I C# regner jeg med at det må tukles med Program.cs, og har prøvd på følgende: [STAThread] static void Main() { try { Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new frmMain()); } catch (Exception ex) { MessageBox.Show(ex.Message); } } static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) { MessageBox.Show(e.Exception.Message); } Og for å teste skriver jeg følgende: public frmMain() { throw new Exception("HEufeiiu"); } Men det funker ikke. Når jeg debugger får jeg den vanlige gule meldingen på linjen, og informasjon om feilmeldingen (dvs "HEufeiiu"). Når jeg prøver å kjøre programmet utenfor VS, så får jeg bare den stygge MS-boksen om at programmet har krasjet. Hvordan bør jeg gå frem for å fange opp alle feilene jeg ikke har tatt høyde for i programmet? Takk, Degeim Lenke til kommentar
GeirGrusom Skrevet 30. mai 2008 Del Skrevet 30. mai 2008 Du kna også endre hvordan .NET reagerer på unahndled exceptions ved å kalle Application.SetUnhandledExceptionMode før Application.Run Setter du den til Catch, vil programmet fortsette som om ingenting har skjedd. Setter du den til Automatic, blir det ThreadException som behandler den (altså den du har spesifisert) Lenke til kommentar
Degeim Skrevet 30. mai 2008 Forfatter Del Skrevet 30. mai 2008 (endret) Humm ... Nå har jeg oppdatert til følgende: [STAThread] static void Main() { try { Application.SetUnhandledExceptionMode(UnhandledExceptionMode.Automatic); Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new frmMain()); } catch (Exception ex) { MessageBox.Show(ex.Message); } } static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) { MessageBox.Show(e.Exception.Message); } Men fremdeles får jeg bare teite "Det har oppstått et problem, og programmet må lukkes. Vi beklager det inntrufne" Endret 30. mai 2008 av Degeim Lenke til kommentar
Manfred Skrevet 30. mai 2008 Del Skrevet 30. mai 2008 Det beste vil vel strengt tatt å legge inn exception handling alle steder i koden hvor det kan oppstå. Bedre enn å skulle fange opp programkrasj, samme pokker hva som har gått galt underveis. Fanger du de opp der de skjer, så kan du jo korrigere og gi en feilmelding uten å avslutte hele programmet. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå