It sounds like you need a priority queue and a way to retrieve some status information from it. It also sounds like you have the priority queue in place. Use locking for queue access and modification. I'm a C# developer and don't know the VB.NET syntax, but in C# there's the lock keyword that can be used to lock a section of code for execution by a single thread. It's pretty simple and the most common technique is to create a locker object that is locked in every place the queue will be touched. Depending on your needs you may want to go with a subscriber model to provide information to other applications. With it you would have queue modification events that other applications 'subscribe' to and they would implement an event handler that will give them an EventArgs object with information about the event (ItemAdded, ItemRemoved, ItemUpdated, ItemProcessed, etc.). Or, perhaps you want to go with a by-request model in which you have methods that return a status object only when invoked. Using .NET Remoting may be useful if it is a Client-Server architecture as the TCP/IP communication is already handled for you and it defaults to using a Singleton, where one instance of the priority queue will exist on the server and clients can interact with that instance remotely.
Keep It Simple Stupid! (KISS)