Smart questions
Smart answers
Smart people
Join Tek-Tips Forums
INTELLIGENT WORK FORUMS
FOR COMPUTER PROFESSIONALS

Member Login




Remember Me
Forgot Password?
Join Us!

Come Join Us!

Are you a
Computer / IT professional?
Join Tek-Tips now!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!

Join Tek-Tips
*Tek-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.
Jobs from Indeed

Link To This Forum!

Partner Button
Add Stickiness To Your Site By Linking To This Professionally Managed Technical Forum.
Just copy and paste the
code below into your site.

haddaway (Programmer) (OP)
10 Nov 05 5:15
I have the following example:

    Private Sub StartListening()
        Dim myReceiveQueue As MessageQueue
        Try
            ' open the receive queue
            myReceiveQueue = New _
               MessageQueue(".\private$\myqueue")

            ' set the receive queue formatter
            myReceiveQueue.Formatter = New XmlMessageFormatter( _
               New Type() {GetType(System.String)})

            ' add a handler for the ReceiveCompleted event and
            ' call BeginReceive
            AddHandler myReceiveQueue.ReceiveCompleted, _
               AddressOf MSMQ_ReceiveCompleted
            myReceiveQueue.BeginReceive()

        Catch ex As Exception
            MessageBox.Show("Generic Exception was thrown: " _
               & ex.Source & ": " & ex.Message)
        End Try
    End Sub

    Public Sub MSMQ_ReceiveCompleted( _
       ByVal p_source As Object, _
       ByVal p_objAsyncResult As ReceiveCompletedEventArgs)
        Dim myMessage As Message
        Dim myMessageQueue As MessageQueue

        ' cast the source parm to a MessageQueue object
        myMessageQueue = CType(p_source, MessageQueue)

        ' calling EndReceive will return the message that was received
        myMessage = myMessageQueue.EndReceive( _
           p_objAsyncResult.AsyncResult)


        ' do something useful with the message
        MessageBox.Show("received")

    End Sub

This sample works well but I wonder one thing. I want the listener to be listening all the time on that queue. What is the best approach? Starting a BeginReceive once a message is read? Or, how do I "loop" it the best way?
Helpful Member!  chiph (Programmer)
10 Nov 05 19:05
When you call BeginReceive, if there's nothing to be read, it will block until some other thread/process writes to the queue.

If you're reading more than one message (like you're writing a server app that programs send messages to over the day), you should add another call to BeginReceive at the end of your receive handler event to kick off the process again.

Chip H.

____________________________________________________________________
Donate to Katrina relief:
http://s1.amazon.com/paypage/PELYGQVJ8Q7IB/103-6821258-5919825
If you want to get the best response to a question, please read FAQ222-2244 first

Reply To This Thread

Posting in the Tek-Tips forums is a member-only feature.

Click Here to join Tek-Tips and talk with other members!

Close Box

Join Tek-Tips® Today!

Join your peers on the Internet's largest technical computer professional community.
It's easy to join and it's free.

Here's Why Members Love Tek-Tips Forums:

Register now while it's still free!

Already a member? Close this window and log in.

Join Us             Close