MFC application stops responding when you initialize the application as a multithreaded apartment in Visual C++ .NET or in Visual C++ 2005 (828643)
The information in this article applies to:
- Microsoft Visual C++ 2005 Express Edition
- Microsoft Visual C++ .NET (2003)
- Microsoft Visual C++ .NET (2002)
SYMPTOMSWhen you use the following CoInitializeEx method call to
initialize a Microsoft Foundation Class Library (MFC) application as a
multithreaded apartment (MTA), the application may stop responding: CoInitializeEx(NULL, COINIT_MULTITHREADED) CAUSEAn MFC application uses a lot of thread local storage to store thread
state information and to process state information. Therefore, an MFC application is not
compatible with a free threaded programming model. For example, if you write an application that displays a user
interface (UI) and that also uses some remote Component Object Model
(COM) objects, during any method calls to the remote COM objects, the UI may
stop responding. This behavior occurs because the UI thread that you initialize as an MTA
thread by using the CoInitializeEx(..., COINIT_MULTITHREADED) method makes blocking
Remote Procedure Calls (RPCs) to another COM apartment. While the UI thread
waits for the RPC response message, any window messages that are posted to the
queue of the UI thread are accumulated. Therefore, windows that were created by
the UI thread may stop responding. This behavior may cause end users to prematurely
quit the application.RESOLUTIONTo work around this problem, run the MFC application (UI
thread) in a Single Threaded Apartment (STA). To do this, initialize the MFC
application by using the CoIntializeEx(..., COINIT_APARTMENTTHREADED) method. When an STA
thread makes an RPC call, the thread drops into a COM-managed message loop (to
dispatch window messages), and COM creates another thread to receive the RPC
response message. Because the COM-managed message loop supports the dispatch of
window messages, the UI can keep running.STATUS This
behavior is by design.
Modification Type: | Major | Last Reviewed: | 1/17/2006 |
---|
Keywords: | kbThread kbbug KB828643 kbAudDeveloper |
---|
|