Transaction.TransactionCompleted Zdarzenie

Definicja

Wskazuje, że transakcja została ukończona.

C#
public event System.Transactions.TransactionCompletedEventHandler? TransactionCompleted;
C#
public event System.Transactions.TransactionCompletedEventHandler TransactionCompleted;

Typ zdarzenia

Wyjątki

Próba zasubskrybowania tego zdarzenia w transakcji, która została usunięta.

Przykłady

Poniższy przykład pokazuje, jak aplikacja może uzyskać wynik transakcji, subskrybując TransactionCompleted zdarzenie.

C#
static void Main(string[] args)
{
    try
    {
        //Create the transaction scope
        using (TransactionScope scope = new TransactionScope())
        {
            //Register for the transaction completed event for the current transaction
            Transaction.Current.TransactionCompleted += new TransactionCompletedEventHandler(Current_TransactionCompleted);

            //Call complete on the TransactionScope based on console input
            ConsoleKeyInfo c;
            while (true)
            {
                Console.Write("Complete the transaction scope? [Y|N] ");
                c = Console.ReadKey();
                Console.WriteLine();

                if ((c.KeyChar == 'Y') || (c.KeyChar == 'y'))
                {
                    scope.Complete();
                    break;
                }
                else if ((c.KeyChar == 'N') || (c.KeyChar == 'n'))
                {
                    break;
                }
            }
        }
    }
    catch (System.Transactions.TransactionException ex)
    {
        Console.WriteLine(ex);
    }
    catch
    {
        Console.WriteLine("Cannot complete transaction");
        throw;
    }
}

//Transaction completed event handler
static void Current_TransactionCompleted(object sender, TransactionEventArgs e)
{
    Console.WriteLine("A transaction has completed:");
    Console.WriteLine("ID:             {0}", e.Transaction.TransactionInformation.LocalIdentifier);
    Console.WriteLine("Distributed ID: {0}", e.Transaction.TransactionInformation.DistributedIdentifier);
    Console.WriteLine("Status:         {0}", e.Transaction.TransactionInformation.Status);
    Console.WriteLine("IsolationLevel: {0}", e.Transaction.IsolationLevel);
}

Uwagi

Możesz zarejestrować się w tym zdarzeniu zamiast użyć nietrwałej rejestracji, aby uzyskać informacje o wyniku transakcji. Parametr przekazywany do delegata TransactionCompletedEventHandler jest wystąpieniem Transaction . Następnie możesz wykonać zapytanie TransactionInformation o właściwość określonego wystąpienia, aby uzyskać wystąpienie TransactionInformationobiektu , którego Status właściwość zawiera stan transakcji z wartością Committed lub Aborted .

Ostrożność Zarejestrowanie się w tym zdarzeniu negatywnie wpływa na wydajność transakcji, do której jest dołączona.

Dotyczy

Produkt Wersje
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1