TOC

This article is currently in the process of being translated into Hindi (~80% done).

A WPF application:

Handling exceptions in WPF

If you're familiar with C# or any of the other .NET languages that you may use with WPF, then exception handling should not be new to you: Whenever you have a piece of code that are likely to throw an exception, then you should wrap it in a try-catch block to handle the exception gracefully. For instance, consider this example:

private void Button_Click(object sender, RoutedEventArgs e)
{
	string s = null;
	s.Trim();
}

जाहिर तौर पे यह कोड नहीं चलेगा, kyunki मैने एक "null" वेरिएबल पे ट्रिम कमांड इस्तेमाल किया है। अगर आप एक्सेसप्शन को नहीं हैंडल करेंगे तोह आप का एप्लीकेशन क्रैश हो जाएगा और फिर विंडोज को इससे निपटना पड़ेग। जैसा की आप देख सकते हैं , यह बहुत यूजर फ्रेंडली नहीं है।

इस बारी यूजर को एप्लीकेशन बंद करना पड़ेगा, जबकि यह एरर आरामसे अवॉयड किया जा सकता ह। इसी लिए अगर आपको लगता है जीज़ें गलत पद सकती हैं, या आपका कोड एरर थ्रो कर सकता है तोह , "तरय-कैच" ब्लॉक का इस्तेमाल इस प्रकार करें :

private void Button_Click(object sender, RoutedEventArgs e)
{
	string s = null;
	try
	{
		s.Trim();
	}
	catch(Exception ex)
	{
		MessageBox.Show("A handled exception just occurred: " + ex.Message, "Exception Sample", MessageBoxButton.OK, MessageBoxImage.Warning);
	}
}

फिर भी कई बार, एक सरल सा कोड भी एक्सेप्शन थ्रो कर सकता है , इसलिए हर बार तरय कैच ब्लॉक इस्तेमाल करने के बाजए, "WPF" आपको ग्लोबली एक्सेप्शन्स भी हैंडल करने देता ह। ये संभव है "DispatcherUnhandledException" के माध्यम से, जो की एप्लीकेशन क्लास में होता ह। अगर इसका इस्तेमाल करते हैं तोह "WPF" एक्सेप्शन थ्रो करेगा जबभी आपके कोड में एक्सेप्शन होता है , उदाहरद के तौर :

<Window x:Class="WpfTutorialSamples.WPF_Application.ExceptionHandlingSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ExceptionHandlingSample" Height="200" Width="200">
    <Grid>
        <Button HorizontalAlignment="Center" VerticalAlignment="Center" Click="Button_Click">
            Do something bad!
        </Button>
    </Grid>
</Window>
using System;
using System.Windows;

namespace WpfTutorialSamples.WPF_Application
{
	public partial class ExceptionHandlingSample : Window
	{
		public ExceptionHandlingSample()
		{
			InitializeComponent();
		}

		private void Button_Click(object sender, RoutedEventArgs e)
		{
			string s = null;
			try
			{
				s.Trim();
			}
			catch(Exception ex)
			{
				MessageBox.Show("A handled exception just occurred: " + ex.Message, "Exception Sample", MessageBoxButton.OK, MessageBoxImage.Warning);
			}
			s.Trim();
		}
	}
}

ध्यान डडेजिये, हमने ट्रिम मेथड फिर से एक बार कॉल कर रहा हूँ , तरय-कैच ब्लॉक के बाहा, ताकि पहला कॉल हैंडल होगा, पर दूर वाला नहीं, दुसरे वाले के लिए हमे, "Appxaml" का जादू चाहिए :

<Application x:Class="WpfTutorialSamples.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             DispatcherUnhandledException="Application_DispatcherUnhandledException"
             StartupUri="WPF Application/ExceptionHandlingSample.xaml">
    <Application.Resources>
    </Application.Resources>
</Application>
using System;
using System.Windows;

namespace WpfTutorialSamples
{
	public partial class App : Application
	{
		private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
		{
			MessageBox.Show("An unhandled exception just occurred: " + e.Exception.Message, "Exception Sample", MessageBoxButton.OK, MessageBoxImage.Warning);
			e.Handled = true;
		}
	}
}

हम एक्सेप्शन लोकल एक्सेप्शन जैसे ही हैंडल करेंगे, बस थोड़ा अलग टेक्स्ट और अलग पिक्चर उसे करक। और, ध्यान दीजिये हमने, "eHandled" को हाँ सेट किया है। यह बताता है की हम इस एक्सेप्शन से डील कर रही हैं और कुछ भी नहीं किया जाना चाहिए।

समरी

एक्सेप्शन से डील करना किसी भी एप्लीकेशन का एक बहुत महत्वपूर्ण हिस्सा है, और किस्मत से डॉट नेट इससे बहुत ही ाचे तरीके से डील करता ह। आपको एक्सेप्शन्स से लोकालय डील करना चाहिए जब भी हो सके, और ग्लोबल एक्सेप्शन हैंडलिंग सिर्फ एक फालबैक के तौर पे उसे करनी चाहि, क्यूंकि लोकल हैंडिंग में आप ज्यादा स्पेसिफिक हो सकते हैं और एरर से अच्छे तरीके से डील भी कर सकते हैं।

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!