MessageQueue.BeginReceive Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Message Queuing'e ileti almaya başlamasını ve tamamlandığında olay işleyicisine bildirmesini bildirerek zaman uyumsuz bir alma işlemi başlatır.
Aşırı Yüklemeler
| Name | Description |
|---|---|
| BeginReceive() |
Zaman aşımı olmayan zaman uyumsuz bir alma işlemi başlatır. kuyrukta bir ileti kullanılabilir duruma gelene kadar işlem tamamlanmaz. |
| BeginReceive(TimeSpan) |
Belirtilen zaman aşımına sahip zaman uyumsuz bir alma işlemi başlatır. kuyrukta bir ileti kullanılabilir duruma gelene veya zaman aşımı gerçekleşene kadar işlem tamamlanmaz. |
| BeginReceive(TimeSpan, Object) |
Belirtilen zaman aşımına ve belirtilen durum nesnesine sahip olan ve işlemin ömrü boyunca ilişkili bilgiler sağlayan zaman uyumsuz bir alma işlemi başlatır. kuyrukta bir ileti kullanılabilir duruma gelene veya zaman aşımı gerçekleşene kadar işlem tamamlanmaz. |
| BeginReceive(TimeSpan, Object, AsyncCallback) |
Belirtilen zaman aşımına ve belirtilen durum nesnesine sahip olan ve işlemin ömrü boyunca ilişkili bilgiler sağlayan zaman uyumsuz bir alma işlemi başlatır. Bu aşırı yükleme, işlem için olay işleyicisinin kimliğini geri çağırma yoluyla bildirim alır. kuyrukta bir ileti kullanılabilir duruma gelene veya zaman aşımı gerçekleşene kadar işlem tamamlanmaz. |
| BeginReceive(TimeSpan, Cursor, Object, AsyncCallback) |
Belirli bir zaman aşımına sahip olan ve belirtilen bir imleç ve belirtilen durum nesnesi kullanan zaman uyumsuz bir alma işlemi başlatır. durum nesnesi, işlemin ömrü boyunca ilişkili bilgiler sağlar. Bu aşırı yükleme, işlem için olay işleyicisinin kimliğini geri çağırma yoluyla bildirim alır. kuyrukta bir ileti kullanılabilir duruma gelene veya zaman aşımı gerçekleşene kadar işlem tamamlanmaz. |
BeginReceive()
Zaman aşımı olmayan zaman uyumsuz bir alma işlemi başlatır. kuyrukta bir ileti kullanılabilir duruma gelene kadar işlem tamamlanmaz.
public:
IAsyncResult ^ BeginReceive();
public IAsyncResult BeginReceive();
member this.BeginReceive : unit -> IAsyncResult
Public Function BeginReceive () As IAsyncResult
Döndürülenler
Gönderilen IAsyncResult zaman uyumsuz isteği tanımlayan.
Özel durumlar
Message Queuing yöntemine erişilirken bir hata oluştu.
Örnekler
Aşağıdaki kod örneği zaman uyumsuz istekleri zincirler. Yerel bilgisayarda "myQueue" adlı bir kuyruk olduğunu varsayar. işlevi, Main yordamı tarafından MyReceiveCompleted işlenen zaman uyumsuz işlemi başlatır.
MyReceiveCompleted geçerli iletiyi işler ve yeni bir zaman uyumsuz alma işlemi başlatır.
#using <system.dll>
#using <system.messaging.dll>
using namespace System;
using namespace System::Messaging;
using namespace System::Threading;
ref class MyNewQueue
{
public:
// Define static class members.
static ManualResetEvent^ signal = gcnew ManualResetEvent( false );
static int count = 0;
// Provides an event handler for the ReceiveCompleted
// event.
static void MyReceiveCompleted( Object^ source, ReceiveCompletedEventArgs^ asyncResult )
{
try
{
// Connect to the queue.
MessageQueue^ mq = dynamic_cast<MessageQueue^>(source);
// End the asynchronous receive operation.
mq->EndReceive( asyncResult->AsyncResult );
count += 1;
if ( count == 10 )
{
signal->Set();
}
// Restart the asynchronous receive operation.
mq->BeginReceive();
}
catch ( MessageQueueException^ )
{
// Handle sources of MessageQueueException.
}
// Handle other exceptions.
return;
}
};
// Provides an entry point into the application.
//
// This example performs asynchronous receive
// operation processing.
int main()
{
// Create an instance of MessageQueue. Set its formatter.
MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" );
array<Type^>^p = gcnew array<Type^>(1);
p[ 0 ] = String::typeid;
myQueue->Formatter = gcnew XmlMessageFormatter( p );
// Add an event handler for the ReceiveCompleted event.
myQueue->ReceiveCompleted += gcnew ReceiveCompletedEventHandler( MyNewQueue::MyReceiveCompleted );
// Begin the asynchronous receive operation.
myQueue->BeginReceive();
MyNewQueue::signal->WaitOne();
// Do other work on the current thread.
return 0;
}
using System;
using System.Messaging;
using System.Threading;
namespace MyProject
{
/// <summary>
/// Provides a container class for the example.
/// </summary>
public class MyNewQueue
{
// Define static class members.
static ManualResetEvent signal = new ManualResetEvent(false);
static int count = 0;
//**************************************************
// Provides an entry point into the application.
//
// This example performs asynchronous receive
// operation processing.
//**************************************************
public static void Main()
{
// Create an instance of MessageQueue. Set its formatter.
MessageQueue myQueue = new MessageQueue(".\\myQueue");
myQueue.Formatter = new XmlMessageFormatter(new Type[]
{typeof(String)});
// Add an event handler for the ReceiveCompleted event.
myQueue.ReceiveCompleted +=
new ReceiveCompletedEventHandler(MyReceiveCompleted);
// Begin the asynchronous receive operation.
myQueue.BeginReceive();
signal.WaitOne();
// Do other work on the current thread.
return;
}
//***************************************************
// Provides an event handler for the ReceiveCompleted
// event.
//***************************************************
private static void MyReceiveCompleted(Object source,
ReceiveCompletedEventArgs asyncResult)
{
try
{
// Connect to the queue.
MessageQueue mq = (MessageQueue)source;
// End the asynchronous receive operation.
Message m = mq.EndReceive(asyncResult.AsyncResult);
count += 1;
if (count == 10)
{
signal.Set();
}
// Restart the asynchronous receive operation.
mq.BeginReceive();
}
catch(MessageQueueException)
{
// Handle sources of MessageQueueException.
}
// Handle other exceptions.
return;
}
}
}
Imports System.Messaging
Imports System.Threading
' Provides a container class for the example.
Public Class MyNewQueue
' Define static class members.
Private Shared signal As New ManualResetEvent(False)
Private Shared count As Integer = 0
' Provides an entry point into the application.
'
' This example performs asynchronous receive
' operation processing.
Public Shared Sub Main()
' Create an instance of MessageQueue. Set its formatter.
Dim myQueue As New MessageQueue(".\myQueue")
myQueue.Formatter = New XmlMessageFormatter(New Type() _
{GetType([String])})
' Add an event handler for the ReceiveCompleted event.
AddHandler myQueue.ReceiveCompleted, AddressOf _
MyReceiveCompleted
' Begin the asynchronous receive operation.
myQueue.BeginReceive()
signal.WaitOne()
' Do other work on the current thread.
Return
End Sub
' Provides an event handler for the ReceiveCompleted
' event.
Private Shared Sub MyReceiveCompleted(ByVal [source] As _
[Object], ByVal asyncResult As ReceiveCompletedEventArgs)
Try
' Connect to the queue.
Dim mq As MessageQueue = CType([source], MessageQueue)
' End the asynchronous receive operation.
Dim m As Message = _
mq.EndReceive(asyncResult.AsyncResult)
count += 1
If count = 10 Then
signal.Set()
End If
' Restart the asynchronous receive operation.
mq.BeginReceive()
Catch
' Handle sources of MessageQueueException.
' Handle other exceptions.
End Try
Return
End Sub
End Class
Aşağıdaki kod örneği zaman uyumsuz istekleri kuyruğa alır. çağrısı BeginReceive , dönüş değerinde öğesini AsyncWaitHandle kullanır. Yordam, Main çıkmadan önce tüm zaman uyumsuz işlemlerin tamamlanmasını bekler.
#using <system.dll>
#using <system.messaging.dll>
using namespace System;
using namespace System::Messaging;
using namespace System::Threading;
ref class MyNewQueue
{
public:
// Provides an event handler for the ReceiveCompleted
// event.
static void MyReceiveCompleted( Object^ source, ReceiveCompletedEventArgs^ asyncResult )
{
try
{
// Connect to the queue.
MessageQueue^ mq = dynamic_cast<MessageQueue^>(source);
// End the asynchronous receive operation.
mq->EndReceive( asyncResult->AsyncResult );
// Process the message here.
Console::WriteLine( "Message received." );
}
catch ( MessageQueueException^ )
{
// Handle sources of MessageQueueException.
}
// Handle other exceptions.
return;
}
};
// Provides an entry point into the application.
//
// This example performs asynchronous receive
// operation processing.
int main()
{
// Create an instance of MessageQueue. Set its formatter.
MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" );
array<Type^>^p = gcnew array<Type^>(1);
p[ 0 ] = String::typeid;
myQueue->Formatter = gcnew XmlMessageFormatter( p );
// Add an event handler for the ReceiveCompleted event.
myQueue->ReceiveCompleted += gcnew ReceiveCompletedEventHandler( MyNewQueue::MyReceiveCompleted );
// Define wait handles for multiple operations.
array<WaitHandle^>^waitHandleArray = gcnew array<WaitHandle^>(10);
for ( int i = 0; i < 10; i++ )
{
// Begin asynchronous operations.
waitHandleArray[ i ] = myQueue->BeginReceive()->AsyncWaitHandle;
}
// Specify to wait for all operations to return.
WaitHandle::WaitAll( waitHandleArray );
return 0;
}
using System;
using System.Messaging;
using System.Threading;
namespace MyProject
{
/// <summary>
/// Provides a container class for the example.
/// </summary>
public class MyNewQueue
{
//**************************************************
// Provides an entry point into the application.
//
// This example performs asynchronous receive
// operation processing.
//**************************************************
public static void Main()
{
// Create an instance of MessageQueue. Set its formatter.
MessageQueue myQueue = new MessageQueue(".\\myQueue");
myQueue.Formatter = new XmlMessageFormatter(new Type[]
{typeof(String)});
// Add an event handler for the ReceiveCompleted event.
myQueue.ReceiveCompleted +=
new ReceiveCompletedEventHandler(MyReceiveCompleted);
// Define wait handles for multiple operations.
WaitHandle[] waitHandleArray = new WaitHandle[10];
for(int i=0; i<10; i++)
{
// Begin asynchronous operations.
waitHandleArray[i] =
myQueue.BeginReceive().AsyncWaitHandle;
}
// Specify to wait for all operations to return.
WaitHandle.WaitAll(waitHandleArray);
return;
}
//***************************************************
// Provides an event handler for the ReceiveCompleted
// event.
//***************************************************
private static void MyReceiveCompleted(Object source,
ReceiveCompletedEventArgs asyncResult)
{
try
{
// Connect to the queue.
MessageQueue mq = (MessageQueue)source;
// End the asynchronous receive operation.
Message m = mq.EndReceive(asyncResult.AsyncResult);
// Process the message here.
Console.WriteLine("Message received.");
}
catch(MessageQueueException)
{
// Handle sources of MessageQueueException.
}
// Handle other exceptions.
return;
}
}
}
Imports System.Messaging
Imports System.Threading
' Provides a container class for the example.
Public Class MyNewQueue
' Provides an entry point into the application.
'
' This example performs asynchronous receive
' operation processing.
Public Shared Sub Main()
' Create an instance of MessageQueue. Set its formatter.
Dim myQueue As New MessageQueue(".\myQueue")
myQueue.Formatter = New XmlMessageFormatter(New Type() _
{GetType([String])})
' Add an event handler for the ReceiveCompleted event.
AddHandler myQueue.ReceiveCompleted, AddressOf _
MyReceiveCompleted
' Define wait handles for multiple operations.
Dim waitHandleArray(10) As WaitHandle
Dim i As Integer
For i = 0 To 9
' Begin asynchronous operations.
waitHandleArray(i) = _
myQueue.BeginReceive().AsyncWaitHandle
Next i
' Specify to wait for all operations to return.
WaitHandle.WaitAll(waitHandleArray)
Return
End Sub
' Provides an event handler for the ReceiveCompleted
' event.
Private Shared Sub MyReceiveCompleted(ByVal [source] As _
[Object], ByVal asyncResult As ReceiveCompletedEventArgs)
Try
' Connect to the queue.
Dim mq As MessageQueue = CType([source], MessageQueue)
' End the asynchronous receive operation.
Dim m As Message = _
mq.EndReceive(asyncResult.AsyncResult)
' Process the message here.
Console.WriteLine("Message received.")
Catch
' Handle sources of MessageQueueException.
' Handle other exceptions.
End Try
Return
End Sub
End Class
Açıklamalar
Zaman uyumsuz işlemede, kuyruktan bir ileti kaldırıldığında olayı tetiklersiniz BeginReceiveReceiveCompleted .
ReceiveCompleted ayrıca kuyrukta zaten bir ileti varsa oluşturulur.
kullanmak BeginReceiveiçin, zaman uyumsuz işlemin sonuçlarını işleyen ve bunu olay temsilcinizle ilişkilendiren bir olay işleyicisi oluşturun. BeginReceive zaman uyumsuz bir alma işlemi başlatır; MessageQueue , kuyruğa bir ileti geldiğinde olayın yükseltilmesiyle ReceiveCompleted bildirilir. daha MessageQueue sonra çağrısı EndReceive(IAsyncResult)yaparak iletiye erişebilir.
BeginReceive yöntemi hemen döndürür, ancak zaman uyumsuz işlem olay işleyici çağrılana kadar tamamlanmaz.
BeginReceive Zaman uyumsuz olduğundan, geçerli yürütme iş parçacığını engellemeden kuyruktan bir ileti almak için çağırabilirsiniz. Bir iletiyi zaman uyumlu bir şekilde almak için yöntemini kullanın Receive .
Zaman uyumsuz bir işlem tamamlandıktan sonra, bildirimleri almaya devam etmek için olay işleyicisinde veya BeginReceive yeniden çağırabilirsinizBeginPeek.
IAsyncResult döndürenBeginReceive, yöntemin başlattığı zaman uyumsuz işlemi tanımlar. Genellikle IAsyncResult çağrılana kadar EndReceive(IAsyncResult) kullanmasanız da, bunu işlemin ömrü boyunca kullanabilirsiniz. Ancak, birkaç zaman uyumsuz işlem başlatırsanız, değerlerini IAsyncResult bir diziye yerleştirebilir ve tüm işlemlerin mi yoksa herhangi bir işlemin mi tamamlanmasının bekleneceğini belirtebilirsiniz. Bu durumda, tamamlanmış işlemi tanımlamak için özelliğini IAsyncResult kullanırsınızAsyncWaitHandle.
ise CanReadfalse, tamamlanma olayı oluşturulur, ancak çağrılırken EndReceive(IAsyncResult)bir özel durum oluşturulur.
Zaman uyumsuz çağrıyı BeginReceive işlemlerle kullanmayın. İşlemsel zaman uyumsuz bir işlem gerçekleştirmek istiyorsanız öğesini çağırın BeginPeekve işlemi ve (zaman uyumlu) Receive yöntemini göz atma işlemi için oluşturduğunuz olay işleyicisine yerleştirin. Olay işleyiciniz aşağıdaki C# kodunda gösterildiği gibi işlevsellik içerebilir.
myMessageQueue.BeginTransaction();
myMessageQueue.Receive();
myMessageQueue.CommitTransaction();
Aşağıdaki tabloda, bu yöntemin çeşitli Çalışma Grubu modlarında kullanılabilir olup olmadığı gösterilmektedir.
| Çalışma grubu modu | Mevcut |
|---|---|
| Yerel bilgisayar | Evet |
| Yerel bilgisayar ve doğrudan biçim adı | Evet |
| Uzak bilgisayar | Hayır |
| Uzak bilgisayar ve doğrudan biçim adı | Evet |
Ayrıca bkz.
Şunlara uygulanır
BeginReceive(TimeSpan)
Belirtilen zaman aşımına sahip zaman uyumsuz bir alma işlemi başlatır. kuyrukta bir ileti kullanılabilir duruma gelene veya zaman aşımı gerçekleşene kadar işlem tamamlanmaz.
public:
IAsyncResult ^ BeginReceive(TimeSpan timeout);
public IAsyncResult BeginReceive(TimeSpan timeout);
member this.BeginReceive : TimeSpan -> IAsyncResult
Public Function BeginReceive (timeout As TimeSpan) As IAsyncResult
Parametreler
- timeout
- TimeSpan
bir TimeSpan iletinin kullanılabilir duruma gelmesini bekleme süresini gösteren bir.
Döndürülenler
Gönderilen IAsyncResult zaman uyumsuz isteği tanımlayan.
Özel durumlar
Parametre için belirtilen değer, büyük olasılıkla negatif bir sayıyı temsil ettiği için timeout geçerli değil.
Message Queuing yöntemine erişilirken bir hata oluştu.
Örnekler
Aşağıdaki kod örneği zaman uyumsuz bir alma işlemi oluşturur. Kod örneği bir MyReceiveCompletedolay işleyicisi oluşturur ve bunu olay işleyicisi temsilcisine ReceiveCompleted ekler. Kod örneği yerel bir ileti kuyruğuna bir ileti gönderir ve ardından on saniyelik zaman aşımı değerini ileterek öğesini çağırır BeginReceive(TimeSpan). Bir ReceiveCompleted olay oluşturulduğunda, olay işleyicisi iletiyi alır ve ileti gövdesini ekrana yazar.
#using <System.Messaging.dll>
#using <System.dll>
using namespace System;
using namespace System::Messaging;
// Creates a new queue.
void CreateQueue(String^ queuePath, bool transactional)
{
if(!MessageQueue::Exists(queuePath))
{
MessageQueue^ queue = MessageQueue::Create(queuePath, transactional);
queue->Close();
}
else
{
Console::WriteLine("{0} already exists.", queuePath);
}
}
// Provides an event handler for the ReceiveCompleted event.
void HandleReceiveCompleted(Object^ source, ReceiveCompletedEventArgs^ e)
{
// Connect to the queue.
MessageQueue^ queue = (MessageQueue^)source;
// End the asynchronous receive operation.
Message^ msg = queue->EndReceive(e->AsyncResult);
// Display the message information on the screen.
Console::WriteLine("Message body: {0}", msg->Body);
queue->Close();
}
int main()
{
// Create a non-transactional queue on the local computer.
// Note that the queue might not be immediately accessible, and
// therefore this example might throw an exception of type
// System.Messaging.MessageQueueException when trying to send a
// message to the newly created queue.
MessageQueue^ queue = nullptr;
try
{
CreateQueue(".\\exampleQueue", false);
// Connect to a queue on the local computer.
queue = gcnew MessageQueue(".\\exampleQueue");
// Add an event handler for the ReceiveCompleted event.
queue->ReceiveCompleted += gcnew
ReceiveCompletedEventHandler(HandleReceiveCompleted);
// Send a message to the queue.
queue->Send("Example Message");
// Begin the asynchronous receive operation.
queue->BeginReceive(TimeSpan::FromSeconds(10.0));
// Simulate doing other work on the current thread.
System::Threading::Thread::Sleep(TimeSpan::FromSeconds(10.0));
}
catch (InvalidOperationException^)
{
Console::WriteLine("Please install Message Queuing.");
}
catch (MessageQueueException^ ex)
{
Console::WriteLine(ex->Message);
}
finally
{
queue->Close();
}
}
using System;
using System.Messaging;
public class QueueExample
{
public static void Main()
{
// Create a non-transactional queue on the local computer.
// Note that the queue might not be immediately accessible, and
// therefore this example might throw an exception of type
// System.Messaging.MessageQueueException when trying to send a
// message to the newly created queue.
CreateQueue(".\\exampleQueue", false);
// Connect to a queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleQueue");
// Add an event handler for the ReceiveCompleted event.
queue.ReceiveCompleted += new
ReceiveCompletedEventHandler(MyReceiveCompleted);
// Send a message to the queue.
queue.Send("Example Message");
// Begin the asynchronous receive operation.
queue.BeginReceive(TimeSpan.FromSeconds(10.0));
// Simulate doing other work on the current thread.
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10.0));
return;
}
// Creates a new queue.
public static void CreateQueue(string queuePath, bool transactional)
{
if(!MessageQueue.Exists(queuePath))
{
MessageQueue.Create(queuePath, transactional);
}
else
{
Console.WriteLine(queuePath + " already exists.");
}
}
// Provides an event handler for the ReceiveCompleted event.
private static void MyReceiveCompleted(Object source,
ReceiveCompletedEventArgs asyncResult)
{
// Connect to the queue.
MessageQueue queue = (MessageQueue)source;
// End the asynchronous receive operation.
Message msg = queue.EndReceive(asyncResult.AsyncResult);
// Display the message information on the screen.
Console.WriteLine("Message body: {0}", (string)msg.Body);
}
}
Açıklamalar
Zaman uyumsuz işlemede, kuyrukta bir ileti kullanılabilir olduğunda veya belirtilen zaman aralığının süresi dolduğunda olayı tetiklersiniz BeginReceiveReceiveCompleted .
ReceiveCompleted ayrıca kuyrukta zaten bir ileti varsa oluşturulur.
kullanmak BeginReceiveiçin, zaman uyumsuz işlemin sonuçlarını işleyen ve bunu olay temsilcinizle ilişkilendiren bir olay işleyicisi oluşturun. BeginReceive zaman uyumsuz bir alma işlemi başlatır; MessageQueue , kuyruğa bir ileti geldiğinde olayın yükseltilmesiyle ReceiveCompleted bildirilir. daha MessageQueue sonra çağrısı yaparak EndReceive(IAsyncResult) veya kullanarak sonucu alarak iletiye ReceiveCompletedEventArgserişebilir.
BeginReceive yöntemi hemen döndürür, ancak zaman uyumsuz işlem olay işleyici çağrılana kadar tamamlanmaz.
BeginReceive Zaman uyumsuz olduğundan, geçerli yürütme iş parçacığını engellemeden kuyruktan bir ileti almak için çağırabilirsiniz. Bir iletiyi zaman uyumlu bir şekilde almak için yöntemini kullanın Receive .
Zaman uyumsuz bir işlem tamamlandıktan sonra, bildirimleri almaya devam etmek için olay işleyicisinde veya BeginReceive yeniden çağırabilirsinizBeginPeek.
ise CanReadfalse, tamamlanma olayı oluşturulur, ancak çağrılırken EndReceive(IAsyncResult)bir özel durum oluşturulur.
IAsyncResult döndürenBeginReceive, yöntemin başlattığı zaman uyumsuz işlemi tanımlar. Genellikle IAsyncResult çağrılana kadar EndReceive(IAsyncResult) kullanmasanız da, bunu işlemin ömrü boyunca kullanabilirsiniz. Ancak, birkaç zaman uyumsuz işlem başlatırsanız, değerlerini IAsyncResult bir diziye yerleştirebilir ve tüm işlemlerin mi yoksa herhangi bir işlemin mi tamamlanmasının bekleneceğini belirtebilirsiniz. Bu durumda, tamamlanmış işlemi tanımlamak için özelliğini IAsyncResult kullanırsınızAsyncWaitHandle.
Bu aşırı yükleme zaman aşımını belirtir. Parametresi tarafından belirtilen aralığın timeout süresi dolarsa, bu bileşen olayı tetikler ReceiveCompleted . İleti olmadığından, sonraki bir çağrısı EndReceive(IAsyncResult) özel durum oluşturur.
Zaman uyumsuz çağrıyı BeginReceive işlemlerle kullanmayın. İşlemsel zaman uyumsuz bir işlem gerçekleştirmek istiyorsanız öğesini çağırın BeginPeekve işlemi ve (zaman uyumlu) Receive yöntemini göz atma işlemi için oluşturduğunuz olay işleyicisine yerleştirin. Olay işleyiciniz aşağıdaki C# kodunda gösterildiği gibi işlevsellik içerebilir.
myMessageQueue.BeginTransaction();
myMessageQueue.Receive();
myMessageQueue.CommitTransaction();
Aşağıdaki tabloda, bu yöntemin çeşitli Çalışma Grubu modlarında kullanılabilir olup olmadığı gösterilmektedir.
| Çalışma grubu modu | Mevcut |
|---|---|
| Yerel bilgisayar | Evet |
| Yerel bilgisayar ve doğrudan biçim adı | Evet |
| Uzak bilgisayar | Hayır |
| Uzak bilgisayar ve doğrudan biçim adı | Evet |
Ayrıca bkz.
Şunlara uygulanır
BeginReceive(TimeSpan, Object)
Belirtilen zaman aşımına ve belirtilen durum nesnesine sahip olan ve işlemin ömrü boyunca ilişkili bilgiler sağlayan zaman uyumsuz bir alma işlemi başlatır. kuyrukta bir ileti kullanılabilir duruma gelene veya zaman aşımı gerçekleşene kadar işlem tamamlanmaz.
public:
IAsyncResult ^ BeginReceive(TimeSpan timeout, System::Object ^ stateObject);
public IAsyncResult BeginReceive(TimeSpan timeout, object stateObject);
member this.BeginReceive : TimeSpan * obj -> IAsyncResult
Public Function BeginReceive (timeout As TimeSpan, stateObject As Object) As IAsyncResult
Parametreler
- timeout
- TimeSpan
bir TimeSpan iletinin kullanılabilir duruma gelmesini bekleme süresini gösteren bir.
- stateObject
- Object
Uygulama tarafından belirtilen ve zaman uyumsuz işlemle ilişkili bilgileri içeren bir durum nesnesi.
Döndürülenler
Gönderilen IAsyncResult zaman uyumsuz isteği tanımlayan.
Özel durumlar
timeout parametresi için belirtilen değer geçerli değil.
Message Queuing yöntemine erişilirken bir hata oluştu.
Örnekler
Aşağıdaki kod örneği zaman uyumsuz bir alma işlemi oluşturur. Kod örneği bir MyReceiveCompletedolay işleyicisi oluşturur ve bunu olay işleyicisi temsilcisine ReceiveCompleted ekler. Kod örneği yerel ileti kuyruğuna bir ileti gönderir, ardından BeginReceive(TimeSpan, Object)çağrısı yaparak on saniyelik bir zaman aşımı değeri ve bu iletiyi tanımlayan benzersiz bir tamsayı iletir. Bir ReceiveCompleted olay oluşturulduğunda, olay işleyicisi iletiyi alır ve ileti gövdesini ve tamsayı ileti tanımlayıcısını ekrana yazar.
#using <System.Messaging.dll>
#using <System.dll>
using namespace System;
using namespace System::Messaging;
// Creates a new queue.
void CreateQueue(String^ queuePath, bool transactional)
{
if(!MessageQueue::Exists(queuePath))
{
MessageQueue^ queue = MessageQueue::Create(queuePath, transactional);
queue->Close();
}
else
{
Console::WriteLine("{0} already exists.", queuePath);
}
}
// Provides an event handler for the ReceiveCompleted event.
void HandleReceiveCompleted(Object^ source, ReceiveCompletedEventArgs^ e)
{
// Connect to the queue.
MessageQueue^ queue = (MessageQueue^)source;
// End the asynchronous receive operation.
Message^ msg = queue->EndReceive(e->AsyncResult);
// Display the message information on the screen.
Console::WriteLine("Message number: {0}", e->AsyncResult->AsyncState);
Console::WriteLine("Message body: {0}", msg->Body);
queue->Close();
}
int main()
{
// Create a non-transactional queue on the local computer.
// Note that the queue might not be immediately accessible, and
// therefore this example might throw an exception of type
// System.Messaging.MessageQueueException when trying to send a
// message to the newly created queue.
MessageQueue^ queue = nullptr;
// Represents a state object associated with each message.
int messageNumber = 0;
try
{
CreateQueue(".\\exampleQueue", false);
// Connect to a queue on the local computer.
queue = gcnew MessageQueue(".\\exampleQueue");
// Add an event handler for the ReceiveCompleted event.
queue->ReceiveCompleted += gcnew
ReceiveCompletedEventHandler(HandleReceiveCompleted);
// Send a message to the queue.
queue->Send("Example Message");
// Begin the asynchronous receive operation.
queue->BeginReceive(TimeSpan::FromSeconds(10.0), messageNumber++);
// Simulate doing other work on the current thread.
System::Threading::Thread::Sleep(TimeSpan::FromSeconds(10.0));
}
catch (InvalidOperationException^)
{
Console::WriteLine("Please install Message Queuing.");
}
catch (MessageQueueException^ ex)
{
Console::WriteLine(ex->Message);
}
finally
{
queue->Close();
}
}
using System;
using System.Messaging;
public class QueueExample
{
// Represents a state object associated with each message.
static int messageNumber = 0;
public static void Main()
{
// Create a non-transactional queue on the local computer.
// Note that the queue might not be immediately accessible, and
// therefore this example might throw an exception of type
// System.Messaging.MessageQueueException when trying to send a
// message to the newly created queue.
CreateQueue(".\\exampleQueue", false);
// Connect to a queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleQueue");
// Add an event handler for the ReceiveCompleted event.
queue.ReceiveCompleted += new
ReceiveCompletedEventHandler(MyReceiveCompleted);
// Send a message to the queue.
queue.Send("Example Message");
// Begin the asynchronous receive operation.
queue.BeginReceive(TimeSpan.FromSeconds(10.0), messageNumber++);
// Simulate doing other work on the current thread.
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10.0));
return;
}
// Creates a new queue.
public static void CreateQueue(string queuePath, bool transactional)
{
if(!MessageQueue.Exists(queuePath))
{
MessageQueue.Create(queuePath, transactional);
}
else
{
Console.WriteLine(queuePath + " already exists.");
}
}
// Provides an event handler for the ReceiveCompleted event.
private static void MyReceiveCompleted(Object source,
ReceiveCompletedEventArgs asyncResult)
{
// Connect to the queue.
MessageQueue queue = (MessageQueue)source;
// End the asynchronous receive operation.
Message msg = queue.EndReceive(asyncResult.AsyncResult);
// Display the message information on the screen.
Console.WriteLine("Message number: {0}",
(int)asyncResult.AsyncResult.AsyncState);
Console.WriteLine("Message body: {0}", (string)msg.Body);
}
}
Açıklamalar
Zaman uyumsuz işlemede, kuyrukta bir ileti kullanılabilir olduğunda veya belirtilen zaman aralığının süresi dolduğunda olayı tetiklersiniz BeginReceiveReceiveCompleted .
ReceiveCompleted ayrıca kuyrukta zaten bir ileti varsa oluşturulur.
Bilgileri işlemin ömrü boyunca korunacak işlemle ilişkilendirmek için bu aşırı yüklemeyi kullanın. Olay işleyicisi, işlemle ilişkili özelliğini IAsyncResult inceleyerek AsyncState bu bilgileri algılayabilir.
kullanmak BeginReceiveiçin, zaman uyumsuz işlemin sonuçlarını işleyen ve bunu olay temsilcinizle ilişkilendiren bir olay işleyicisi oluşturun. BeginReceive zaman uyumsuz bir alma işlemi başlatır; MessageQueue , kuyruğa bir ileti geldiğinde olayın yükseltilmesiyle ReceiveCompleted bildirilir. daha MessageQueue sonra çağrısı yaparak EndReceive(IAsyncResult) veya kullanarak sonucu alarak iletiye ReceiveCompletedEventArgserişebilir.
BeginReceive yöntemi hemen döndürür, ancak zaman uyumsuz işlem olay işleyici çağrılana kadar tamamlanmaz.
BeginReceive Zaman uyumsuz olduğundan, geçerli yürütme iş parçacığını engellemeden kuyruktan bir ileti almak için çağırabilirsiniz. Bir iletiyi zaman uyumlu bir şekilde almak için yöntemini kullanın Receive .
Zaman uyumsuz bir işlem tamamlandıktan sonra, bildirimleri almaya devam etmek için olay işleyicisinde veya BeginReceive yeniden çağırabilirsinizBeginPeek.
IAsyncResult döndürenBeginReceive, yöntemin başlattığı zaman uyumsuz işlemi tanımlar. Genellikle IAsyncResult çağrılana kadar EndReceive(IAsyncResult) kullanmasanız da, bunu işlemin ömrü boyunca kullanabilirsiniz. Ancak, birkaç zaman uyumsuz işlem başlatırsanız, değerlerini IAsyncResult bir diziye yerleştirebilir ve tüm işlemlerin mi yoksa herhangi bir işlemin mi tamamlanmasının bekleneceğini belirtebilirsiniz. Bu durumda, tamamlanmış işlemi tanımlamak için özelliğini IAsyncResult kullanırsınızAsyncWaitHandle.
Bu aşırı yükleme, zaman aşımını ve durum nesnesini belirtir. Parametresi tarafından belirtilen aralığın timeout süresi dolarsa, bu bileşen olayı tetikler ReceiveCompleted . İleti olmadığından, sonraki bir çağrısı EndReceive(IAsyncResult) özel durum oluşturur.
Durum nesnesi, durum bilgilerini işlemle ilişkilendirir. Örneğin, birden çok işlemi başlatmak için birden çok kez çağırırsanız BeginReceive , her işlemi tanımladığınız ayrı bir durum nesnesi aracılığıyla tanımlayabilirsiniz.
Durum nesnesini, bilgileri işlem iş parçacıkları arasında geçirmek için de kullanabilirsiniz. Bir iş parçacığı başlatılırsa ancak zaman uyumsuz bir senaryoda geri çağırma farklı bir iş parçacığındaysa, durum nesnesi sıralanır ve olay bilgileriyle birlikte geri geçirilir.
Zaman uyumsuz çağrıyı BeginReceive işlemlerle kullanmayın. İşlemsel zaman uyumsuz bir işlem gerçekleştirmek istiyorsanız öğesini çağırın BeginPeekve işlemi ve (zaman uyumlu) Receive yöntemini göz atma işlemi için oluşturduğunuz olay işleyicisine yerleştirin. Olay işleyiciniz aşağıdaki C# kodunda gösterildiği gibi işlevsellik içerebilir.
myMessageQueue.BeginTransaction();
myMessageQueue.Receive();
myMessageQueue.CommitTransaction();
Aşağıdaki tabloda, bu yöntemin çeşitli Çalışma Grubu modlarında kullanılabilir olup olmadığı gösterilmektedir.
| Çalışma grubu modu | Mevcut |
|---|---|
| Yerel bilgisayar | Evet |
| Yerel bilgisayar ve doğrudan biçim adı | Evet |
| Uzak bilgisayar | Hayır |
| Uzak bilgisayar ve doğrudan biçim adı | Evet |
Ayrıca bkz.
Şunlara uygulanır
BeginReceive(TimeSpan, Object, AsyncCallback)
Belirtilen zaman aşımına ve belirtilen durum nesnesine sahip olan ve işlemin ömrü boyunca ilişkili bilgiler sağlayan zaman uyumsuz bir alma işlemi başlatır. Bu aşırı yükleme, işlem için olay işleyicisinin kimliğini geri çağırma yoluyla bildirim alır. kuyrukta bir ileti kullanılabilir duruma gelene veya zaman aşımı gerçekleşene kadar işlem tamamlanmaz.
public:
IAsyncResult ^ BeginReceive(TimeSpan timeout, System::Object ^ stateObject, AsyncCallback ^ callback);
public IAsyncResult BeginReceive(TimeSpan timeout, object stateObject, AsyncCallback callback);
member this.BeginReceive : TimeSpan * obj * AsyncCallback -> IAsyncResult
Public Function BeginReceive (timeout As TimeSpan, stateObject As Object, callback As AsyncCallback) As IAsyncResult
Parametreler
- timeout
- TimeSpan
bir TimeSpan iletinin kullanılabilir duruma gelmesini bekleme süresini gösteren bir.
- stateObject
- Object
Uygulama tarafından belirtilen ve zaman uyumsuz işlemle ilişkili bilgileri içeren bir durum nesnesi.
- callback
- AsyncCallback
Zaman AsyncCallback uyumsuz işlem tamamlama bildirimini alacak olan.
Döndürülenler
Gönderilen IAsyncResult zaman uyumsuz isteği tanımlayan.
Özel durumlar
timeout parametresi için belirtilen değer geçerli değil.
Message Queuing yöntemine erişilirken bir hata oluştu.
Örnekler
Aşağıdaki kod örneği zaman uyumsuz bir alma işlemi oluşturur. Kod örneği yerel ileti kuyruğuna bir ileti gönderir, ardından öğesini çağırırBeginReceive(TimeSpan, Object, AsyncCallback): on saniyelik zaman aşımı değeri; belirli bir iletiyi tanımlayan benzersiz bir tamsayı ve olay işleyicisini AsyncCallback tanımlayan yeni bir örneği. MyReceiveCompleted Bir ReceiveCompleted olay oluşturulduğunda, olay işleyicisi iletiyi alır ve ileti gövdesini ve tamsayı ileti tanımlayıcısını ekrana yazar.
#using <System.Messaging.dll>
#using <System.dll>
using namespace System;
using namespace System::Messaging;
// Creates a new queue.
void CreateQueue(String^ queuePath, bool transactional)
{
if (!MessageQueue::Exists(queuePath))
{
MessageQueue^ queue = MessageQueue::Create(queuePath, transactional);
queue->Close();
}
else
{
Console::WriteLine("{0} already exists.", queuePath);
}
}
// Provides an event handler for the ReceiveCompleted event.
void HandleReceiveCompleted(IAsyncResult^ asyncResult)
{
// Connect to the queue.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleQueue");
// End the asynchronous receive operation.
Message^ msg = queue->EndReceive(asyncResult);
// Display the message information on the screen.
Console::WriteLine("Message number: {0}", asyncResult->AsyncState);
Console::WriteLine("Message body: {0}", msg->Body);
queue->Close();
}
int main()
{
// Represents a state object associated with each message.
int messageNumber = 0;
// Create a non-transactional queue on the local computer.
// Note that the queue might not be immediately accessible, and
// therefore this example might throw an exception of type
// System.Messaging.MessageQueueException when trying to send a
// message to the newly created queue.
MessageQueue^ queue = nullptr;
try
{
CreateQueue(".\\exampleQueue", false);
// Connect to a queue on the local computer.
queue = gcnew MessageQueue(".\\exampleQueue");
// Send a message to the queue.
queue->Send("Example Message");
// Begin the asynchronous receive operation.
queue->BeginReceive(TimeSpan::FromSeconds(10.0), messageNumber++,
gcnew AsyncCallback(HandleReceiveCompleted));
// Simulate doing other work on the current thread.
System::Threading::Thread::Sleep(TimeSpan::FromSeconds(10.0));
}
catch (InvalidOperationException^)
{
Console::WriteLine("Please install Message Queuing.");
}
catch (MessageQueueException^ ex)
{
Console::WriteLine(ex->Message);
}
finally
{
queue->Close();
}
}
using System;
using System.Messaging;
public class QueueExample
{
// Represents a state object associated with each message.
static int messageNumber = 0;
public static void Main()
{
// Create a non-transactional queue on the local computer.
// Note that the queue might not be immediately accessible, and
// therefore this example might throw an exception of type
// System.Messaging.MessageQueueException when trying to send a
// message to the newly created queue.
CreateQueue(".\\exampleQueue", false);
// Connect to a queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleQueue");
// Send a message to the queue.
queue.Send("Example Message");
// Begin the asynchronous receive operation.
queue.BeginReceive(TimeSpan.FromSeconds(10.0), messageNumber++,
new AsyncCallback(MyReceiveCompleted));
// Simulate doing other work on the current thread.
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10.0));
return;
}
// Creates a new queue.
public static void CreateQueue(string queuePath, bool transactional)
{
if(!MessageQueue.Exists(queuePath))
{
MessageQueue.Create(queuePath, transactional);
}
else
{
Console.WriteLine(queuePath + " already exists.");
}
}
// Provides an event handler for the ReceiveCompleted event.
private static void MyReceiveCompleted(IAsyncResult asyncResult)
{
// Connect to the queue.
MessageQueue queue = new MessageQueue(".\\exampleQueue");
// End the asynchronous receive operation.
Message msg = queue.EndReceive(asyncResult);
// Display the message information on the screen.
Console.WriteLine("Message number: {0}", (int)asyncResult.AsyncState);
Console.WriteLine("Message body: {0}", (string)msg.Body);
}
}
Açıklamalar
Bu aşırı yüklemeyi kullandığınızda, geri çağırma parametresinde belirtilen geri çağırma, kuyrukta bir ileti kullanılabilir olduğunda veya belirtilen zaman aralığı sona erdiğinde doğrudan çağrılır; ReceiveCompleted olayı tetiklenmez. diğer aşırı yüklemeleri BeginReceive , olayı yükseltmek için bu bileşene ReceiveCompleted güvenir.
ReceiveCompleted ayrıca kuyrukta zaten bir ileti varsa oluşturulur.
kullanmak BeginReceiveiçin, zaman uyumsuz işlemin sonuçlarını işleyen ve bunu olay temsilcinizle ilişkilendiren bir olay işleyicisi oluşturun. BeginReceive zaman uyumsuz bir alma işlemi başlatır; MessageQueue , kuyruğa bir ileti geldiğinde olayın yükseltilmesiyle ReceiveCompleted bildirilir. daha MessageQueue sonra çağrısı yaparak EndReceive(IAsyncResult) veya kullanarak sonucu alarak iletiye ReceiveCompletedEventArgserişebilir.
BeginReceive yöntemi hemen döndürür, ancak zaman uyumsuz işlem olay işleyici çağrılana kadar tamamlanmaz.
BeginReceive Zaman uyumsuz olduğundan, geçerli yürütme iş parçacığını engellemeden kuyruktan bir ileti almak için çağırabilirsiniz. Bir iletiyi zaman uyumlu bir şekilde almak için yöntemini kullanın Receive .
Zaman uyumsuz bir işlem tamamlandıktan sonra, bildirimleri almaya devam etmek için olay işleyicisinde veya BeginReceive yeniden çağırabilirsinizBeginPeek.
IAsyncResult döndürenBeginReceive, yöntemin başlattığı zaman uyumsuz işlemi tanımlar. Genellikle IAsyncResult çağrılana kadar EndReceive(IAsyncResult) kullanmasanız da, bunu işlemin ömrü boyunca kullanabilirsiniz. Ancak, birkaç zaman uyumsuz işlem başlatırsanız, değerlerini IAsyncResult bir diziye yerleştirebilir ve tüm işlemlerin mi yoksa herhangi bir işlemin mi tamamlanmasının bekleneceğini belirtebilirsiniz. Bu durumda, tamamlanmış işlemi tanımlamak için özelliğini IAsyncResult kullanırsınızAsyncWaitHandle.
Durum nesnesi, durum bilgilerini işlemle ilişkilendirir. Örneğin, birden çok işlemi başlatmak için birden çok kez çağırırsanız BeginReceive , her işlemi tanımladığınız ayrı bir durum nesnesi aracılığıyla tanımlayabilirsiniz.
Durum nesnesini, bilgileri işlem iş parçacıkları arasında geçirmek için de kullanabilirsiniz. Bir iş parçacığı başlatılırsa ancak zaman uyumsuz bir senaryoda geri çağırma farklı bir iş parçacığındaysa, durum nesnesi sıralanır ve olay bilgileriyle birlikte geri geçirilir.
Zaman uyumsuz çağrıyı BeginReceive işlemlerle kullanmayın. İşlemsel zaman uyumsuz bir işlem gerçekleştirmek istiyorsanız öğesini çağırın BeginPeekve işlemi ve (zaman uyumlu) Receive yöntemini göz atma işlemi için oluşturduğunuz olay işleyicisine yerleştirin. Olay işleyiciniz aşağıdaki C# kodunda gösterildiği gibi işlevsellik içerebilir.
myMessageQueue.BeginTransaction();
myMessageQueue.Receive();
myMessageQueue.CommitTransaction();
Aşağıdaki tabloda, bu yöntemin çeşitli Çalışma Grubu modlarında kullanılabilir olup olmadığı gösterilmektedir.
| Çalışma grubu modu | Mevcut |
|---|---|
| Yerel bilgisayar | Evet |
| Yerel bilgisayar ve doğrudan biçim adı | Evet |
| Uzak bilgisayar | Hayır |
| Uzak bilgisayar ve doğrudan biçim adı | Evet |
Ayrıca bkz.
Şunlara uygulanır
BeginReceive(TimeSpan, Cursor, Object, AsyncCallback)
Belirli bir zaman aşımına sahip olan ve belirtilen bir imleç ve belirtilen durum nesnesi kullanan zaman uyumsuz bir alma işlemi başlatır. durum nesnesi, işlemin ömrü boyunca ilişkili bilgiler sağlar. Bu aşırı yükleme, işlem için olay işleyicisinin kimliğini geri çağırma yoluyla bildirim alır. kuyrukta bir ileti kullanılabilir duruma gelene veya zaman aşımı gerçekleşene kadar işlem tamamlanmaz.
public:
IAsyncResult ^ BeginReceive(TimeSpan timeout, System::Messaging::Cursor ^ cursor, System::Object ^ state, AsyncCallback ^ callback);
public IAsyncResult BeginReceive(TimeSpan timeout, System.Messaging.Cursor cursor, object state, AsyncCallback callback);
member this.BeginReceive : TimeSpan * System.Messaging.Cursor * obj * AsyncCallback -> IAsyncResult
Public Function BeginReceive (timeout As TimeSpan, cursor As Cursor, state As Object, callback As AsyncCallback) As IAsyncResult
Parametreler
- timeout
- TimeSpan
bir TimeSpan iletinin kullanılabilir duruma gelmesini bekleme süresini gösteren bir.
- state
- Object
Uygulama tarafından belirtilen ve zaman uyumsuz işlemle ilişkili bilgileri içeren bir durum nesnesi.
- callback
- AsyncCallback
AsyncCallback Zaman uyumsuz işlem tamamlama bildirimini alan.
Döndürülenler
Gönderilen IAsyncResult zaman uyumsuz isteği tanımlayan.
Özel durumlar
cursor parametresi null'dir.
timeout parametresi için belirtilen değer geçerli değil.
Message Queuing yöntemine erişilirken bir hata oluştu.
Açıklamalar
Bu aşırı yüklemeyi kullandığınızda, geri çağırma parametresinde belirtilen geri çağırma, kuyrukta bir ileti kullanılabilir olduğunda veya belirtilen zaman aralığı sona erdiğinde doğrudan çağrılır; ReceiveCompleted olayı tetiklenmez. diğer aşırı yüklemeleri BeginReceive , olayı yükseltmek için bu bileşene ReceiveCompleted güvenir.
ReceiveCompleted ayrıca kuyrukta zaten bir ileti varsa oluşturulur.
kullanmak BeginReceiveiçin, zaman uyumsuz işlemin sonuçlarını işleyen ve bunu olay temsilcinizle ilişkilendiren bir olay işleyicisi oluşturun. BeginReceive zaman uyumsuz bir alma işlemi başlatır; MessageQueue , kuyruğa bir ileti geldiğinde olayın yükseltilmesiyle ReceiveCompleted bildirilir. daha MessageQueue sonra çağrısı yaparak EndReceive(IAsyncResult) veya kullanarak sonucu alarak iletiye ReceiveCompletedEventArgserişebilir.
BeginReceive yöntemi hemen döndürür, ancak zaman uyumsuz işlem olay işleyici çağrılana kadar tamamlanmaz.
BeginReceive Zaman uyumsuz olduğundan, geçerli yürütme iş parçacığını engellemeden kuyruktan bir ileti almak için çağırabilirsiniz. Bir iletiyi zaman uyumlu bir şekilde almak için yöntemini kullanın Receive .
Zaman uyumsuz bir işlem tamamlandıktan sonra, bildirimleri almaya devam etmek için olay işleyicisinde veya BeginReceive yeniden çağırabilirsinizBeginPeek.
IAsyncResult döndürenBeginReceive, yöntemin başlattığı zaman uyumsuz işlemi tanımlar. Genellikle IAsyncResult çağrılana kadar EndReceive(IAsyncResult) kullanmasanız da, bunu işlemin ömrü boyunca kullanabilirsiniz. Ancak, birkaç zaman uyumsuz işlem başlatırsanız, değerlerini IAsyncResult bir diziye yerleştirebilir ve tüm işlemlerin mi yoksa herhangi bir işlemin mi tamamlanmasının bekleneceğini belirtebilirsiniz. Bu durumda, tamamlanan işlemi tanımlamak için özelliğini IAsyncResult kullanınAsyncWaitHandle.
Durum nesnesi, durum bilgilerini işlemle ilişkilendirir. Örneğin, birden çok işlemi başlatmak için birden çok kez çağırırsanız BeginReceive , her işlemi tanımladığınız ayrı bir durum nesnesi aracılığıyla tanımlayabilirsiniz.
Durum nesnesini, bilgileri işlem iş parçacıkları arasında geçirmek için de kullanabilirsiniz. Bir iş parçacığı başlatılırsa ancak zaman uyumsuz bir senaryoda geri çağırma farklı bir iş parçacığındaysa, durum nesnesi sıralanır ve olay bilgileriyle birlikte geri geçirilir.
Zaman uyumsuz çağrıyı BeginReceive işlemlerle kullanmayın. İşlemsel zaman uyumsuz bir işlem gerçekleştirmek istiyorsanız öğesini çağırın BeginPeekve işlemi ve (zaman uyumlu) Receive yöntemini göz atma işlemi için oluşturduğunuz olay işleyicisine yerleştirin. Olay işleyiciniz aşağıdaki C# kodunda gösterildiği gibi işlevsellik içerebilir.
myMessageQueue.BeginTransaction();
myMessageQueue.Receive();
myMessageQueue.CommitTransaction();
Aşağıdaki tabloda, bu yöntemin çeşitli Çalışma Grubu modlarında kullanılabilir olup olmadığı gösterilmektedir.
| Çalışma grubu modu | Mevcut |
|---|---|
| Yerel bilgisayar | Evet |
| Yerel bilgisayar ve doğrudan biçim adı | Evet |
| Uzak bilgisayar | Hayır |
| Uzak bilgisayar ve doğrudan biçim adı | Evet |
Ayrıca bkz.
Şunlara uygulanır
İş Parçacığı Güvenliği
yöntemi iş parçacığı güvenli değil.