Transaction.TransactionCompleted 事件
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
指出交易已完成。
public:
event System::Transactions::TransactionCompletedEventHandler ^ TransactionCompleted;
public event System.Transactions.TransactionCompletedEventHandler? TransactionCompleted;
public event System.Transactions.TransactionCompletedEventHandler TransactionCompleted;
member this.TransactionCompleted : System.Transactions.TransactionCompletedEventHandler
Public Custom Event TransactionCompleted As TransactionCompletedEventHandler
事件類型
例外狀況
嘗試在已經處置的交易上訂閱這個事件。
範例
下列範例示範應用程式如何藉由訂閱 TransactionCompleted 事件來取得交易的結果。
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
備註
您可以註冊此事件,而不是使用變動性登記來取得交易的結果資訊。 傳遞至委派的參數 TransactionCompletedEventHandler 是 Transaction 實例。 然後,您可以查詢 TransactionInformation 特定實例的 屬性,以取得 的 TransactionInformation 實例,其 Status 屬性包含具有 或 Aborted 值之交易 Committed 的狀態。
謹慎 註冊此事件會對附加的交易效能造成負面影響。