Making things clear

  • Thread starter Thread starter Oriane
  • Start date Start date
O

Oriane

Hi,

If I run a classical Windows Form .Net application, with several UI
controls/windows, I guess that (unless I explicitely create new threads)
every UI objects will have the same message pump (since they all have been
created by the same thread). Correct ?

My point is that when we speak about the "UI thread", I don't know if we
speak about the thread which owns the message pump or about the thread which
updates the UI. I want to be sure that this thread does both.

Best regards
 
Hi Oriane,

Yes, every UI object will have the same message pump.

Message pump is also called message queue. The system automatically creates
a message queue for each thread in an application.

If the thread creates one or more windows, a message loop must be provided;
this message loop retrieves messages from the thread's message queue and
dispatches them to the appropriate window procedures.

In WinForm applications, we call Application.Run method to run a standard
application message loop on the current thread.
when we speak about the "UI thread", I don't know if we speak about the
thread which owns the message pump or about the thread which updates the
UI.

The "UI thread" refers to the thread that creates forms and controls on the
forms and that updates the UI.

Hope I make things clear.
If you have any question, please feel free to let me know.

Sincerely,
Linda Liu
Microsoft Online Community Support

Delighting our customers is our #1 priority. We welcome your comments and
suggestions about how we can improve the support we provide to you. Please
feel free to let my manager know what you think of the level of service
provided. You can send feedback directly to my manager at:
(e-mail address removed).

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
 
Hi Linda,
Linda Liu said:
Hi Oriane,

Yes, every UI object will have the same message pump.

Message pump is also called message queue. The system automatically
creates
a message queue for each thread in an application.

If the thread creates one or more windows, a message loop must be
provided;
this message loop retrieves messages from the thread's message queue and
dispatches them to the appropriate window procedures.

In WinForm applications, we call Application.Run method to run a standard
application message loop on the current thread.

Hope I make things clear. Yes you are. Thank you !
If you have any question, please feel free to let me know.
Yes one more concerning "Dispatcher.Invoke (priority, delegate xxx)".

This is a synchronous call so, if I call this method from within the UI
thread (I suppose that this is the main and only thread in my app to keep
things simple), I expect a deadlock, since the UI thread can't continue
untill the message has been treated, and the message can't be treated since
it must be treated in this same thread.

I test that and there is no deadlock. Don't know why...

Best regards
 
Thanks Pete for your excellent reply!

Hi Oriane,

I agree with Pete.

What we should pay attention to is to call the Control.Invoke method from a
separate thread because the UI thread may be waiting for some resources
that is currently being used by the separate thread and in the meantime the
separate thread is waiting for the UI thread to execute the delegate. Thus
there's a dead lock. To solve this problem, call the Control.BeginInvoke
method instead.

Hope this helps.
If you have any question, please feel free to let us know.

Sincerely,
Linda Liu
Microsoft Online Community Support
 
Hi Oriane,

I'm reviewing this post in the newsgroup and would like to know the status
of this issue.

If you have any further question about this issue, please feel free to let
me know.

Thank you for using our MSDN Managed Newsgroup Support Service!

Sincerely,
Linda Liu
Microsoft Online Community Support
 
Hi Linda,
Linda Liu said:
Hi Oriane,

I'm reviewing this post in the newsgroup and would like to know the status
of this issue.
Sorry, I'm a bit late ! The issue is closed as far as I know :-)

Best regards
 
Thanks Oriane for your confirmation!

If you have any other questions in the future, please don't hesitate to
contact us. It's always our pleasure to be of assistance.

Have a nice day!

Sincerely,
Linda Liu
Microsoft Online Community Support
 
Back
Top