WPF - Penanganan Pengecualian

Pengecualian adalah kondisi galat atau perilaku tak terduga yang ditemui selama pelaksanaan program. Pengecualian dapat dimunculkan karena berbagai alasan, beberapa di antaranya adalah sebagai berikut -

  • Kesalahan dalam kode Anda atau dalam kode yang Anda panggil (seperti perpustakaan bersama),

  • Sumber daya sistem operasi tidak tersedia,

  • Kondisi tak terduga yang ditemui runtime bahasa umum (seperti kode yang tidak dapat diverifikasi)

Sintaksis

Pengecualian memiliki kemampuan untuk mentransfer aliran program dari satu bagian ke bagian lain. Dalam kerangka .NET, penanganan pengecualian memiliki empat kata kunci berikut -

  • try - Di blok ini, program mengidentifikasi kondisi tertentu yang menimbulkan beberapa pengecualian.

  • catch- Kata kunci catch menunjukkan penangkapan pengecualian. SEBUAHtry blok diikuti oleh satu atau lebih catch blok untuk menangkap pengecualian dengan penangan pengecualian di tempat dalam program di mana Anda ingin menangani masalah.

  • finally- Blok terakhir digunakan untuk mengeksekusi serangkaian pernyataan tertentu, baik pengecualian dilempar atau tidak. Misalnya, jika Anda membuka file, itu harus ditutup baik pengecualian dimunculkan atau tidak.

  • throw- Program mengeluarkan pengecualian saat masalah muncul. Ini dilakukan dengan menggunakan kata kunci lemparan.

Sintaks untuk menggunakan keempat kata kunci ini adalah sebagai berikut -

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 
}

Pernyataan beberapa tangkapan digunakan dalam kasus-kasus di mana blok percobaan dapat memunculkan lebih dari satu pengecualian tergantung pada situasi aliran program.

Hirarki

Hampir semua kelas pengecualian dalam kerangka .NET secara langsung atau tidak langsung berasal dari kelas Exception. Kelas pengecualian terpenting yang diturunkan dari kelas Exception adalah -

  • ApplicationException class- Mendukung pengecualian yang dihasilkan oleh program. Ketika pengembang ingin mendefinisikan pengecualian maka kelas harus diturunkan dari kelas ini.

  • SystemException class- Ini adalah kelas dasar untuk semua pengecualian sistem runtime yang telah ditentukan sebelumnya. Hierarki berikut menunjukkan pengecualian standar yang disediakan oleh runtime.

Tabel berikut mencantumkan pengecualian standar yang disediakan oleh waktu proses dan ketentuan yang mengharuskan Anda membuat kelas turunan.

Jenis pengecualian Tipe dasar Deskripsi
Exception Obyek Kelas dasar untuk semua pengecualian.
SystemException Pengecualian Kelas dasar untuk semua kesalahan yang dihasilkan waktu proses.
IndexOutOfRangeException SystemException Dilempar oleh runtime hanya jika array tidak diindeks dengan benar.
NullReferenceException SystemException Dilempar oleh runtime hanya jika objek null direferensikan.
AccessViolationException SystemException Dilemparkan oleh runtime hanya ketika memori yang tidak valid diakses.
InvalidOperationException SystemException Dilempar oleh metode saat dalam keadaan tidak valid.
ArgumentException SystemException Kelas dasar untuk semua pengecualian argumen.
ArgumentNullException ArgumentException Dilempar oleh metode yang tidak mengizinkan argumen menjadi null.
ArgumentOutOfRangeException ArgumentException Ditampilkan oleh metode yang memverifikasi bahwa argumen berada dalam rentang tertentu.
ExternalException SystemException Kelas dasar untuk pengecualian yang terjadi atau ditargetkan pada lingkungan di luar runtime.
SEHException ExternalException Pengecualian merangkum informasi penanganan pengecualian terstruktur Win32.

Contoh

Mari kita ambil contoh sederhana untuk memahami konsep dengan lebih baik. Mulailah dengan membuat proyek WPF baru dengan namaWPFExceptionHandling.

Seret satu kotak teks dari kotak alat ke jendela desain. Kode XAML berikut membuat kotak teks dan menginisialisasinya dengan beberapa properti.

<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>

Berikut adalah pembacaan file dengan penanganan pengecualian di C #.

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(); 
            } 
         } 
      } 
   } 
}

Ketika Anda mengkompilasi dan menjalankan kode di atas, itu akan menghasilkan jendela berikut di mana teks ditampilkan di dalam kotak teks.

Ketika ada pengecualian yang dimunculkan atau Anda membuangnya secara manual (seperti pada kode berikut), maka itu akan menampilkan kotak pesan dengan kesalahan.

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(); 
            } 
         } 
      } 
   } 
}

Ketika pengecualian dimunculkan saat menjalankan kode di atas, itu akan menampilkan pesan berikut.

Kami menyarankan Anda untuk menjalankan kode di atas dan bereksperimen dengan fitur-fiturnya.