Transaction.TransactionCompleted 이벤트

정의

트랜잭션이 완료되었음을 나타냅니다.Indicates that the transaction is completed.

public:
 event System::Transactions::TransactionCompletedEventHandler ^ TransactionCompleted;
public event System.Transactions.TransactionCompletedEventHandler TransactionCompleted;
member this.TransactionCompleted : System.Transactions.TransactionCompletedEventHandler 
Public Custom Event TransactionCompleted As TransactionCompletedEventHandler 

예외

삭제된 트랜잭션에 이 이벤트를 등록하려고 한 경우An attempt to subscribe this event on a transaction that has been disposed.

예제

다음 샘플 애플리케이션을 구독 하 여 트랜잭션의 결과 가져올 수 있습니다 하는 방법을 보여 줍니다는 TransactionCompleted 이벤트입니다.The following sample shows how an application can obtain the outcome of a transaction by subscribing to the TransactionCompleted event.

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);
}
Public Shared Sub Main()
    Try
        Using scope As TransactionScope = New TransactionScope()

            'Register for the transaction completed event for the current transaction
            AddHandler Transaction.Current.TransactionCompleted, AddressOf Current_TransactionCompleted

            'Perform transactional work here.

            'Call complete on the TransactionScope based on console input
            Dim c As ConsoleKeyInfo
            While (True)

                Console.Write("Complete the transaction scope? [Y|N] ")
                c = Console.ReadKey()
                Console.WriteLine()
                If (c.KeyChar = "Y") Or (c.KeyChar = "y") Then
                    scope.Complete()
                    Exit While
                ElseIf ((c.KeyChar = "N") Or (c.KeyChar = "n")) Then
                    Exit While
                End If
                
            End While

        End Using
    Catch ex As TransactionException
        Console.WriteLine(ex)
    Catch
        Console.WriteLine("Cannot complete transaction")
        Throw
    End Try
End Sub

'Transaction completed event handler
Private Shared Sub Current_TransactionCompleted(ByVal sender As Object, ByVal e As TransactionEventArgs)
    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)
End Sub

설명

트랜잭션에 대 한 결과 정보를 얻을 수는 일시적인 인 리스트 먼 트를 사용 하는 대신이 이벤트에 대해 등록할 수 있습니다.You can register for this event instead of using a volatile enlistment to get outcome information for transactions. TransactionCompletedEventHandler 대리자에 전달 된 매개 변수는 Transaction 인스턴스입니다.The parameter passed to the TransactionCompletedEventHandler delegate is a Transaction instance. 그런 다음 특정 인스턴스의 TransactionInformation 속성을 쿼리하여 TransactionInformation인스턴스를 가져올 수 있습니다. Status 속성에는 Committed 또는 Aborted 값을 사용 하는 트랜잭션 상태가 포함 됩니다.You can then query the TransactionInformation property of the specific instance to get an instance of TransactionInformation, whose Status property contains the status of a transaction with either the Committed or Aborted value.

주의 이 이벤트에 등록 하면 연결 된 트랜잭션의 성능에 부정적인 영향을 줍니다.Caution Signing up for this event negatively affects the performance of the transaction it is attached to.

적용 대상