Question

Message Loop in Console App?

Asked by: derekl

I am attempting to use the Microsoft RTC APIs from a managed C# application.  The documentation for the object states that it uses the message loop for function calls and event handling.  However, I would like to use this component from a console application.  So, my question is, can I add a message loop to a console application easily, or if that's not easy, is there an easy way to create a windows forms application that doesn't actually display a form?

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2004-10-12 at 12:49:00ID21165644
Tags

message

,

loop

,

console

Topic

C# Programming Language

Participating Experts
1
Points
200
Comments
10

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Console-less program
    I want to create a small app that does not use a console and does not display a console. Any idea how to do this using visual c++ 5.0?
  2. Console output
    I am trying to redirect the output generated by the console window to a file, and read it out. the following is what I have so far, and it works. It just does not write out the command to the file. Can anybody help me out a bit, it's probably just a small thing... Private Co...
  3. Write In Console
    Dear Experts I developed a application which will run continuously. Each and every status of the application will be logged in a log file. I developed my application in such a way that it hides in the task bar when it is minimized. What i want to do is to write each and ever...
  4. Interrupting a loop
    I have a loop that goes on for eternity, never stops. However I want to be able to, by sending a command from a different program, stop the loop. I, however, do not want to be polling the whole time since this is too computer intensive and might delay the main loop. Does anyo...
  5. Console Application
    Hello, I had written a console application in which I'm not using any forms nor I'm assigning any consoles, AllocConsole API, for the application. My problem is when ever I run this application from command window, the control returns immediately without waiting for the appli...
  6. Clearing the console
    Hi, Im mofiying a friends program that finds its way through a maze, and would like to know how to clear the console in java so when I reprint the maze for every step the old step doesnt appear right above it, thanks!

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: AvonWyssPosted on 2004-10-12 at 13:06:10ID: 12291441

Both is possible. Actually, you can have console applications that also have forms (no matter if they are visible or not). To start a new message loop on a given thread, call Application.Run() - see the help files for details.

 

by: dereklPosted on 2004-10-12 at 16:23:04ID: 12293091

So it's as easy as starting a thread and calling Application.Run, and the COM object will find that message loop and use it appropriately?  That would pretty much be the threads entire purpose I assume?  Also, do I have to call Application.Exit from the same thread, to exit the message loop?  I don't ever expect to get a message on that loop as I said it is simply need to have a message loop to satisfy the com object requirements.

 

by: AvonWyssPosted on 2004-10-12 at 23:36:50ID: 12295171

Yes, that's basically it, but the COM object will not "find" the message loop. It must be run from the thread where you created the message loop, since Windows messages are per thread. And calling Application.Exit will tear down the message loop, so that it's a good idea to call this when you're done. Or just assign the thread's IsBackground proprrty to true and let the thread in the message loop, it will then be aborted when the application closes.

 

by: dereklPosted on 2004-10-13 at 07:05:31ID: 12298246

How can I run the COM object on the message loop thread if Application.Run never returns and I will not be receiving any windows messages?  I seem to recall a method that will allow me to schedule method executions for the applications Message Loop thread, InvokeLater or something.  Would this work?

 

by: AvonWyssPosted on 2004-10-13 at 07:25:53ID: 12298458

Yes, you can create an invisible form (for instance, which is minimized and not shown in the taskbar), and then you can call it's Invoke() method to have things run in its thread.

 

by: dereklPosted on 2004-10-13 at 08:13:24ID: 12299036

OK, only two more questions.  I assume the form must be created on the thread with the message loop.  Is it OK to do this before the loop is started?  Also, is using a form's invoke method the only means to guarantee code executes on a given thread?  It seems like this would be a useful feature in non windows forms applications.

 

by: AvonWyssPosted on 2004-10-13 at 08:24:58ID: 12299193

Well, the handles are not allocated when you call the constructor, so you SHOULD be able to construct the form before calling the thread. But I'd rather do it in the thread to be on the safe side, where lies the problem of doing this?

The Form.Invoke() method will put a message in the message queue which is then dispached via message loop. The handler for this specific message then executes the given delegate, and since it was called fromt he message loop, in the thread where the loop is running. You can think as sort of injecting code into the message loop.

To do this with any Thread, you can use the Abort(object) method and handle this in a catch block of the thread, issuing an ResetAbort() inside that block to make the thread continue to run. But since this raises an exception in the thread, it's only suitable for very specifically for this built threads.

 

by: dereklPosted on 2004-10-13 at 10:35:41ID: 12300473

OK, I've upped the point value since you've helped me so much!

I guess I don't see how to create the object after the message loop is started.  If I call Application.Run() (no argument version) this function never returns.  You are telling me I can execute arbitrary code on this thread by using Form.Invoke(), but how do I execute the code to create the form on the thread?  Since the form does not exist yet, I obviously can't use Form.Invoke for this purpose.  It sounds like I would need to pump a message to the MessageLoop thread to get this done.  Is this correct?  If so, how do I pump a message to this specific MessageLoop.  Or, since I will have a form, maybe I can use a custom ApplicationContext object to handle this?  I believe it's constructor gets executed on the MessageLoop thread, correct?  If I attempted to use Application.Run(Form form) I believe that version shows the form which is not acceptable.  So, is Application.Run(ApplicationContext ac) the way to go?

 

by: AvonWyssPosted on 2004-10-13 at 11:41:01ID: 12301198

Well, like this:

public class ApplicationForm(): Form {
...your form here...
}

public ApplicationForm applicationForm;

private void ThreadCode() {
     applicationForm=new ApplicationForm();
     Application.Run(applicationForm);
}

...your code here...
     new Thread(new ThreadStart(ThreadCode)).Start();
...wait some so the other thread starts and creates the form...
     applicationForm.Invoke(...);

That should to the trick!

 

by: AvonWyssPosted on 2004-10-13 at 11:43:59ID: 12301226

Or you can also use the normal empty Run() and the Idle event, but if you want to run a form anyways, it's easiest like the example I gave in the previous post.

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...