دوستان و علاقمندان به مباحث WPF وقتتون بخیر. با آموزش WPF از وب سایت آموزشی پی وی لرن همراهتون هستیم. مدیریت استثنا یا Exception Handling در WPF را در این بخش از آموزش، بررسی خواهیم نمود.
یک Exception هرگونه خطا یا رفتار غیرمنتظره ای است که هنگام اجرای یک برنامه با آن روبرو می شوید. به دلایل زیادی استثنائات قابل طرح است ، برخی از آن ها به شرح زیر است.
استثنائات قابلیت انتقال جریان برنامه از یک قسمت به بخش دیگر را دارند. در فریم ورک NET. ، مدیریت Exception چهار کلید واژه زیر را دارد.
سینتکس استفاده از این چهار کلمه کلیدی به شرح زیر است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | try { ///This will still trigger the exception } catch (ExceptionClassName e) { // error handling code } catch (ExceptionClassName e) { // error handling code } catch (ExceptionClassName e) { // error handling code } finally { // statements to be executed } |
عبارت catch چندگانه در مواردی استفاده می شود که یک بلوک try بسته به وضعیت جریان برنامه می تواند بیش از یک استثناء را ایجاد کند.
تقریباً تمام کلاس های استثناء در فریم ورک NET. به طور مستقیم یا غیرمستقیم از کلاس Exception گرفته شده اند. مهم ترین کلاس های استثنائی که از کلاس Exception به دست آمده است، شامل موارد زیر می باشد.
در جدول زیر استثنائات استاندارد ارائه شده توسط زمان اجرا و شرایطی که شما باید یک کلاس مشتق شده ایجاد کنید را ذکر می کند.
نوع Exception | نوع پایه | شرح |
---|---|---|
Exception | Object | کلاس پایه برای همه استثنائات. |
SystemException | Exception | کلاس پایه برای همه خطاهای ایجاد شده در زمان اجرا. |
IndexOutOfRangeException | SystemException | پرتاب شده توسط زمان اجرا فقط هنگامی که یک آرایه نادرست ایندکس شود. |
NullReferenceException | SystemException | پرتاب شده توسط زمان اجرا فقط در صورت مراجعه به یک شیء تهی. |
AccessViolationException | SystemException | پرتاب شده توسط زمان اجرا فقط در صورت دسترسی به حافظه نامعتبر. |
InvalidOperationException | SystemException | پرتاب شده با متد وقتی که در حالت نامعتبر است. |
ArgumentException | SystemException | کلاس پایه برای همه استثنائات آرگومان. |
ArgumentNullException | ArgumentException | پرتاب با متدهایی که اجازه نمی دهد یک آرگومان تهی باشد. |
ArgumentOutOfRangeException | ArgumentException | پرتاب با متدهایی که تأیید می کند آرگومان ها در محدوده مشخصی قرار دارند. |
ExternalException | SystemException | کلاس پایه برای استثنائاتی که اتفاق می افتد یا در محیط خارج از زمان اجرا هدف قرار گرفته می شود. |
SEHException | ExternalException | کپسوله شدن Exception Win32 ساختار یافته شده به وسیله ی اطلاعات مدیریت exception |
بیایید یک مثال ساده برای درک بهتر مفهوم قرار دهیم. با ایجاد یک پروژه WPF جدید با نام WPFExceptionHandling شروع کنید.
یک جعبه متن را از جعبه ابزار به پنجره طراحی درگ کنید. کد XAML زیر یک جعبه متنی ایجاد می کند و آن را با برخی از خصوصیات مقداردهی می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <Window x:Class = "WPFExceptionHandling.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local = "clr-namespace:WPFExceptionHandling" mc:Ignorable = "d" Title = "MainWindow" Height = "350" Width = "604"> <Grid> <TextBox x:Name = "textBox" HorizontalAlignment = "Left" Height = "241" Margin = "70,39,0,0" TextWrapping = "Wrap" VerticalAlignment = "Top" Width = "453"/> </Grid> </Window> |
در این جا خواندن فایل با مدیریت استثناء در #C آورده شده است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | using System; using System.IO; using System.Windows; namespace WPFExceptionHandling { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); ReadFile(0); } void ReadFile(int index) { string path = @"D:\Test.txt"; StreamReader file = new StreamReader(path); char[] buffer = new char[80]; try { file.ReadBlock(buffer, index, buffer.Length); string str = new string(buffer); str.Trim(); textBox.Text = str; } catch (Exception e) { MessageBox.Show("Error reading from "+ path + "\nMessage = "+ e.Message); } finally { if (file != null) { file.Close(); } } } } } |
هنگامی که کد بالا را کامپایل و اجرا می کنید ، پنجره زیر را تولید می کند که در آن متن در جعبه متن نمایش داده می شود.
هنگامی که استثنائی مطرح شده است یا آن را به صورت دستی پرتاب می کنید (مانند کد زیر) ، آن گاه یک جعبه پیام را با خطا (error) نشان می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | using System; using System.IO; using System.Windows; namespace WPFExceptionHandling { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); ReadFile(0); } void ReadFile(int index) { string path = @"D:\Test.txt"; StreamReader file = new StreamReader(path); char[] buffer = new char[80]; try { file.ReadBlock(buffer, index, buffer.Length); string str = new string(buffer); throw new Exception(); str.Trim(); textBox.Text = str; } catch (Exception e) { MessageBox.Show("Error reading from "+ path + "\nMessage = "+ e.Message); } finally { if (file != null) { file.Close(); } } } } } |
هنگامی که یک استثناء هنگام اجرای کد بالا ایجاد شد ، پیام زیر را نشان می دهد.
توصیه می کنیم که کد فوق را اجرا کرده و ویژگی های آن را امتحان کنید.
در این بخش از آموزش WPF به مبحث مدیریت استثنا یا Exception Handling در WPF پرداختیم. در بخش بعد به بررسی Localization می پردازیم. با وب سایت پی وی لرن همراه باشید.