====== Exceptions ====== As already described in the topic [[trycatch|Try - Catch]] the .NET Framework uses exceptions to notify about an error condition. Take as sample the ''String:SubString()'' method: local cString as string local cResult as string cString := "Hello world" cResult := cString:Substring( 5, 30 ) Since the string is less than 35 characters long, this code produces an OutOfRangeException and terminates your program. So, when using this method on strings, you have a few possibilities: * use this method only enclosed in a ''try-catch'' block * check the string length and adjust the parameters accordingly * or use an own method (for example a static method or an [[extension_methods|Extension methods]] of the ''System.String'' class) Exception handling is very important in the .NET Framework. In every place where an error can occur, you should provide exception handling. If you don't provide it, at runtime the application will crash without details about the error. There are also a few application wide handlers you can install (and your should use them): * [[https://docs.microsoft.com/en-us/dotnet/api/system.appdomain.unhandledexception?|AppDomain.UnhandledException]]: handles otherwise unhandled exceptions * [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.application.threadexception|Application.ThreadException]]: handles exceptions in Windows Forms applications * [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.application.dispatcherunhandledexception|Application.DispatcherUnhandledException]]: handles exceptions in the WPF GUI You can find a note about these also in the X# forum: [[https://www.xsharp.info/forum/public-vo-vn/310-suggestions-for-conversion-vo-programs-using-vo-gui-classes?start=10|Handling exceptions by Paul Piko]] There are several publicily available exception handlers like [[https://logging.apache.org/log4net/|Apache log4net]] or [[https://msdn.microsoft.com/en-us/library/ff649552.aspx|Exception Handling Application Block]] in the Enterprise Library. Nevertheless here is a small collection of simple exception handlers: * [[write_exception_log|Write an exception to a log file]] * [[exception_handler_vogui|Exception handler for a VO GUI application]] * [[exception_handler_winforms|Exception handler for a WinForms application]] * [[exception_handler_wpf|Exception handler for a WPF application]]