次の方法で共有


方法 : メッセージの非同期受信します。

[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 空白のトピックは、プレースホルダーとして挿入されています。]

2 つの方法で非同期的にメッセージを取得できます。イベント ハンドラーを使用する操作の処理の完了時またはコールバックを使用して通知を受信するため。 非同期メッセージングの概要、については 非同期メッセージの処理 を参照してください。

イベントの通知] ではまず、イベント ハンドラー、非同期呼び出しが完了したらを実行するプロシージャにバインドします。 コード内で BeginReceive メソッドを呼び出します。 この、非同期処理を開始し、メッセージがわかりしだい、またはタイムアウト パラメーターは、期限が切れたときにコンポーネントに処理を返します。 呼び出しが戻るとき、システム定義したデリゲートを実行し、取得の結果を処理します。 操作の終わりを示すEndReceive メソッドを呼び出します。

注意

BeginReceive 1 つのメッセージのみが取得されます。メッセージを非同期的に処理を続行する場合は、もう一度 BeginReceive メソッドを呼び出すかを引き続き、キューに到着する新しいメッセージを監視するデリゲートを呼び出す BeginReceive でのコールバック パラメーターを使用する必要がありますください。

非同期的にメッセージを受け取り、に加えてすることができますピーク メッセージ非同期的にします。 両方のプロセスのパターンは非常に似ていますが、BeginPeek メソッドを使用する非同期のピーク] を。

MessageQueue オブジェクトをプログラムで作成するには

  1. プロジェクトに System.Messaging.dll への参照を追加します。

  2. 実装は、し、その MessageQueue プロパティ (コンストラクター) と Path プロパティを設定するクラスに Formatter オブジェクトのインスタンスを作成します。

                                ' Add this to the constructor
                                Dim targetTypeNames = {"System.String,mscorlib"}
    mq.Formatter =
       New System.Messaging.XmlMessageFormatter(targetTypeNames)
    
                                // Add this to the class declarations.
            System.Messaging.MessageQueue mq =
               new System.Messaging.MessageQueue(".\\MyQueue");
            // Add this to the constructor.
            mq.Formatter = new System.Messaging.XmlMessageFormatter(
               newstring[] { "System.String,mscorlib" });
    

MessageQueue オブジェクトをデザイナーで作成するには

  1. プロジェクトに System.Messaging.dll への参照を追加します。

  2. のツールボックス、 MessageQueue コンポーネントをデザイナーにドラッグします。 QueueName プロパティを mq に設定します。 Formatter プロパティを XmlMessageFormatter に設定します。 Path プロパティを ".\MyQueue" に設定します。

非同期イベント通知を使ってメッセージを受信

  1. ReceiveCompleted イベントのイベント ハンドラーを作成します。 デザイナーで、MessageQueue コンポーネントをダブルクリックし、次のようにコードを追加します。

                                Private
                                Sub mq_ReceiveCompleted(
            ByVal sender As System.Object,
            ByVal e As System.Messaging.ReceiveCompletedEventArgs
            ) Handles mq.ReceiveCompleted
        ' Add code here to respond to message.EndSub
    
                                private
                                void mq_ReceiveCompleted(object sender,
            System.Messaging.ReceiveCompletedEventArgs e)
            {
                // Add code here to respond to message.
            }
    
  2. Message オブジェクトの非同期呼び出しの結果を取得するを使用して、メッセージを取得するイベント ハンドラー内でコード記述します。 次のコード、メッセージを取得し、コンソールに表示します。

                                Private
                                Sub mq_ReceiveCompleted(
            ByVal sender As System.Object,
            ByVal e As System.Messaging.ReceiveCompletedEventArgs
            ) Handles mq.ReceiveCompleted
    
        Dim m As System.Messaging.Message = mq.EndReceive(e.AsyncResult)
        m.Formatter = New System.Messaging.XmlMessageFormatter(
           {"System.String,mscorlib"})
        Console.WriteLine("Message: " & m.Body.ToString())
    EndSub
    
                                private
                                void mq_ReceiveCompleted(object sender,
        System.Messaging.ReceiveCompletedEventArgs e)
        {
            System.Messaging.Message m = mq.EndReceive(e.AsyncResult);
            m.Formatter = new System.Messaging.XmlMessageFormatter(
               newstring[] { "System.String,mscorlib" });
            Console.WriteLine("Message: " + (string)m.Body);
        }
    
  3. 非同期操作を開始するコードで、任意の場所 BeginReceive メソッドを呼び出します。 たとえば、次のコードは、ユーザーがボタンをクリックするとメソッドを呼び出します。

                                Private
                                Sub Button1_Click(ByVal sender As System.Object,
                              ByVal e As System.EventArgs) Handles Button1.Click
        mq.BeginReceive()
    EndSub
    
                                private
                                void button1_Click(object sender, System.EventArgs e)
        {
            mq.BeginReceive();
        }
    
  4. BeginReceive イベント ハンドラーで、もう一度 ReceiveCompleted メソッドを呼び出すメッセージを非同期的に受信を継続する場合は、以下に示します。 これにより、引き続き、キューに受信したときに新しいメッセージを処理コンポーネント。

                                Private
                                Sub mq_ReceiveCompleted(
            ByVal sender As System.Object,
            ByVal e As System.Messaging.ReceiveCompletedEventArgs
            ) Handles mq.ReceiveCompleted
    
        Dim m As System.Messaging.Message = mq.EndReceive(e.AsyncResult)
        m.Formatter = New System.Messaging.XmlMessageFormatter(
           {"System.String,mscorlib"})
        Console.WriteLine("Message: " & m.Body.ToString())
        mq.BeginReceive()
    EndSub
    
                                private
                                void mq_ReceiveCompleted(object sender,
            System.Messaging.ReceiveCompletedEventArgs e)
            {
                System.Messaging.Message m = mq.EndReceive(e.AsyncResult);
                m.Formatter = new System.Messaging.XmlMessageFormatter(
                   newstring[] { "System.String,mscorlib" });
                Console.WriteLine("Message: " + (string)m.Body);
                mq.BeginReceive();
            }
    

使用して、コールバックを非同期でメッセージを受信

  1. メッセージ タスクに関連情報を定義するクラスを作成します。 ここでは、Customer クラスを定義します。

                                Public
                                Class Customer
        Public Name AsString = ""PublicSubNew(ByVal newName AsString)
            Name = newName
        EndSubEndClass
    
                                public
                                class Customer
        {
            publicstring Name = "";
            public Customer(string name)
            {
                Name = name;
            }
        }
    
  2. クラスのインスタンスを作成します。 このオブジェクトは、コールバック メソッドに渡されます。

                                Dim george AsNew Customer("George")
    
                Customer george = new Customer("George");
    
  3. AsyncCallback デリゲートに対してコールバック メソッドを作成します。 このメソッドは、メッセージの受信後に実行する処理。 AsyncState パラメーターの result プロパティは、メッセージのタスクに関する情報を渡す作成するオブジェクト。 ここでは、AsyncState は Customer オブジェクトです。

                                Private
                                Sub ReceiveCallback(ByVal result As System.IAsyncResult)
        Dim buyer As Customer = CType(result.AsyncState, Customer)
        Dim buyerName AsString = buyer.Name
    EndSub
    
                                private
                                void ReceiveCallback(System.IAsyncResult result)
            {
                Customer buyer = (Customer)result.AsyncState;
                string buyerName = buyer.Name;
            }
    
  4. 非同期操作を開始するコードで、任意の場所 BeginReceive メソッドを呼び出します。 たとえば、次のコードは、ユーザーがボタンをクリックするとメソッドを呼び出します。 メッセージはメッセージ キューに送信して、キューから表示されます。 、、上記の手順 3 で定義されている、ReceiveCallback 方法と、メッセージを受け取ったとき呼びます。

                                Private
                                Sub Button1_Click(ByVal sender As System.Object, 
                              ByVal e As System.EventArgs) Handles Button1.Click
        MessageQueue1.Send("Buy six eggs.", george.Name)
        MessageQueue1.BeginReceive(New System.TimeSpan(0, 0, 5), george,
            AddressOf ReceiveCallback)
    EndSub
    
                                private
                                void button1_Click(object sender, System.EventArgs e)
            {
                messageQueue1.Send("Buy six eggs.", george.Name);
                messageQueue1.BeginReceive(new System.TimeSpan(0, 0, 5), george,
                    new System.AsyncCallback(this.ReceiveCallback));
            }
    

参照

処理手順

方法 : メッセージをピークします。

方法 : プログラムによるメッセージを受信します。

方法 : MessageQueue コンポーネントのインスタンスを作成します。

概念

非同期メッセージの処理

その他の技術情報

読み取りとメッセージの取得