{"id":1364,"date":"2023-04-03T14:49:29","date_gmt":"2023-04-03T07:49:29","guid":{"rendered":"https:\/\/csharptutorial.net\/?page_id=1364"},"modified":"2023-04-03T14:49:57","modified_gmt":"2023-04-03T07:49:57","slug":"csharp-unhandledexception","status":"publish","type":"page","link":"https:\/\/www.csharptutorial.net\/csharp-tutorial\/csharp-unhandledexception\/","title":{"rendered":"C# UnhandledException"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you&#8217;ll learn about C# <code>UnhandledException<\/code> and how to provide a global exception handler.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction to the C# UnhandledException<\/h2>\n\n\n\n<p>In C#, an unhandled exception is an exception that occurs but doesn&#8217;t have a corresponding exception handler. If the exception remains unhandled, the program will crash.<\/p>\n\n\n\n<p>Typically, when an exception occurs, the .NET runtime will look for an exception handler that can handle the exception. If it cannot find one, the runtime terminates the application and displays an error message.<\/p>\n\n\n\n<p>To prevent this from happening, you can handle the exception in your code using the <code><a href=\"https:\/\/csharptutorial.net\/csharp-tutorial\/csharp-try-catch\/\">try...catch<\/a><\/code> block:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">try<\/span>\r\n{\r\n    <span class=\"hljs-comment\">\/\/ Code that might throw an exception<\/span>\r\n}\r\n<span class=\"hljs-keyword\">catch<\/span> (Exception ex)\r\n{\r\n    <span class=\"hljs-comment\">\/\/ Code that handles the exception<\/span>\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In this example, the code in the <code>try<\/code> block might cause an exception. And the <code>catch<\/code> block handles the exception if it occurs.<\/p>\n\n\n\n<p>The <code>catch<\/code> block can handle the exception by logging the error, <a href=\"https:\/\/csharptutorial.net\/csharp-tutorial\/csharp-rethrow-exception\/\">rethrowing the same or new exception<\/a>, or taking other actions.<\/p>\n\n\n\n<p>To provide a global exception handler, you can subscribe the <code>AppDomain.UnhandledException<\/code> event. This event is raised whenever an unhandled exception occurs. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">using<\/span> <span class=\"hljs-keyword\">static<\/span> System.Console;\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">int<\/span> <span class=\"hljs-title\">Divide<\/span>(<span class=\"hljs-params\"><span class=\"hljs-keyword\">int<\/span> a, <span class=\"hljs-keyword\">int<\/span> b<\/span>)<\/span>\n{\n    <span class=\"hljs-keyword\">return<\/span> a \/ b;\n}\n\nAppDomain.CurrentDomain.UnhandledException +=\n        <span class=\"hljs-keyword\">new<\/span> UnhandledExceptionEventHandler(HandleException);\n\n\n<span class=\"hljs-comment\">\/\/ cause an exception<\/span>\n<span class=\"hljs-keyword\">var<\/span> result = Divide(<span class=\"hljs-number\">10<\/span>, <span class=\"hljs-number\">0<\/span>); \n\nWriteLine(result);\n\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">HandleException<\/span>(<span class=\"hljs-params\"><span class=\"hljs-keyword\">object<\/span> sender, UnhandledExceptionEventArgs e<\/span>)<\/span>\n{\n    WriteLine(<span class=\"hljs-string\">$\"Sorry, there was a problem occurs. The program is terminated. \\n <span class=\"hljs-subst\">{e.ExceptionObject}<\/span>\"<\/span>);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In this example, the <code>Main<\/code> method subscribes to <code>AppDomain.UnhandledException<\/code> event. If an exception occurs but no handler is available to catch it, the <code>HandleException<\/code> method will execute to handle the exception.<\/p>\n\n\n\n<p>By doing this, you can prevent your program from crashing and deliver a better user experience.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If an exception occurs but no handler is found, the .NET runtime will look for a global exception handler.<\/li>\n\n\n\n<li>Subscribe to the <code>AppDomain.UnhandledException<\/code> event to handle unhandled exceptions.<\/li>\n<\/ul>\n<div class=\"helpful-block-content\" data-title=\"\">\n\t<header>\n\t\t<div class=\"wth-question\">Was this tutorial helpful ?<\/div>\n\t\t<div class=\"wth-thumbs\">\n\t\t\t<button\n\t\t\t\tdata-post=\"1364\"\n\t\t\t\tdata-post-url=\"https:\/\/www.csharptutorial.net\/csharp-tutorial\/csharp-unhandledexception\/\"\n\t\t\t\tdata-post-title=\"C# UnhandledException\"\n\t\t\t\tdata-response=\"1\"\n\t\t\t\tclass=\"wth-btn-rounded wth-yes-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\tclass=\"feather feather-thumbs-up block w-full h-full\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> Yes <\/span>\n\t\t\t<\/button>\n\n\t\t\t<button\n\t\t\t\tdata-response=\"0\"\n\t\t\t\tdata-post=\"1364\"\n\t\t\t\tdata-post-url=\"https:\/\/www.csharptutorial.net\/csharp-tutorial\/csharp-unhandledexception\/\"\n\t\t\t\tdata-post-title=\"C# UnhandledException\"\n\t\t\t\tclass=\"wth-btn-rounded wth-no-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> No <\/span>\n\t\t\t<\/button>\n\t\t<\/div>\n\t<\/header>\n\n\t<div class=\"wth-form hidden\">\n\t\t<div class=\"wth-form-wrapper\">\n\t\t\t<div class=\"wth-title\"><\/div>\n\t\t\t\n\t\t\t<textarea class=\"wth-message\"><\/textarea>\n\n\t\t\t<button class=\"btn btn-primary wth-btn-submit\">Send<\/button>\n\t\t\t<button class=\"btn wth-btn-cancel\">Cancel<\/button>\n\t\t\n\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summary: in this tutorial, you&#8217;ll learn about C# UnhandledException and how to provide a global exception handler. Introduction to the C# UnhandledException In C#, an unhandled exception is an exception that occurs but doesn&#8217;t have a corresponding exception handler. If the exception remains unhandled, the program will crash. Typically, when an exception occurs, the .NET [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":7,"menu_order":63,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1364","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages\/1364","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/comments?post=1364"}],"version-history":[{"count":2,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages\/1364\/revisions"}],"predecessor-version":[{"id":1366,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages\/1364\/revisions\/1366"}],"up":[{"embeddable":true,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages\/7"}],"wp:attachment":[{"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/media?parent=1364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}