Jak używać bloku try/catch do przechwytywania wyjątków

Umieść dowolne instrukcje kodu, które mogą zgłaszać lub zgłaszać wyjątek w try bloku, i umieszczać instrukcje używane do obsługi wyjątków lub wyjątków w co najmniej jednym catch bloku poniżej try bloku. Każdy catch blok zawiera typ wyjątku i może zawierać dodatkowe instrukcje potrzebne do obsługi tego typu wyjątku.

W poniższym przykładzie zostanie StreamReader otwarty plik o nazwie data.txt i pobiera wiersz z pliku. Ponieważ kod może zgłaszać dowolne z trzech wyjątków, znajduje się w try bloku. Trzy catch bloki przechwytują wyjątki i obsługują je, wyświetlając wyniki w konsoli.

using namespace System;
using namespace System::IO;

public ref class ProcessFile
{
public:
    static void Main()
    {
        try
        {
            StreamReader^ sr = File::OpenText("data.txt");
            Console::WriteLine("The first line of this file is {0}", sr->ReadLine());
            sr->Close();
        }
        catch (Exception^ e)
        {
            Console::WriteLine("An error occurred: '{0}'", e);
        }
    }
};

int main()
{
    ProcessFile::Main();
}
using System;
using System.IO;

public class ProcessFile
{
    public static void Main()
    {
        try
        {
            using (StreamReader sr = File.OpenText("data.txt"))
            {
                Console.WriteLine($"The first line of this file is {sr.ReadLine()}");
            }
        }
        catch (FileNotFoundException e)
        {
            Console.WriteLine($"The file was not found: '{e}'");
        }
        catch (DirectoryNotFoundException e)
        {
            Console.WriteLine($"The directory was not found: '{e}'");
        }
        catch (IOException e)
        {
            Console.WriteLine($"The file could not be opened: '{e}'");
        }
    }
}
Imports System.IO

Public Class ProcessFile
    Public Shared Sub Main()
        Try
            Using sr As StreamReader = File.OpenText("data.txt")
                Console.WriteLine($"The first line of this file is {sr.ReadLine()}")
            End Using
        Catch e As FileNotFoundException
            Console.WriteLine($"The file was not found: '{e}'")
        Catch e As DirectoryNotFoundException
            Console.WriteLine($"The directory was not found: '{e}'")
        Catch e As IOException
            Console.WriteLine($"The file could not be opened: '{e}'")
        End Try
    End Sub
End Class

Środowisko uruchomieniowe języka wspólnego (CLR) przechwytuje wyjątki, które nie są obsługiwane przez catch bloki. Jeśli wyjątek zostanie przechwycony przez clR, jeden z następujących wyników może wystąpić w zależności od konfiguracji środowiska CLR:

  • Zostanie wyświetlone okno dialogowe Debugowanie .
  • Program zatrzymuje wykonywanie, a zostanie wyświetlone okno dialogowe z informacjami o wyjątku.
  • Błąd jest wyświetlany do standardowego strumienia danych wyjściowych błędów.

Uwaga

Większość kodu może zgłosić wyjątek, a niektóre wyjątki, takie jak OutOfMemoryException, mogą być zgłaszane przez samą clr w dowolnym momencie. Chociaż aplikacje nie są wymagane do obsługi tych wyjątków, należy pamiętać o możliwości pisania bibliotek, które mają być używane przez inne osoby. Aby uzyskać sugestie dotyczące ustawiania kodu w try bloku, zobacz Najlepsze rozwiązania dotyczące wyjątków.

Zobacz też