Implemented by the solution-wrapper to the OutputWindow tool window. It is not guaranteed to be implemented by all COM objects that implement IVsOutputWindowPane, so clients that need pump-free writing to the output window should try to cast to this interface and use it if the cast succeeds, but be prepared to fallback to calling IVsOutputWindowPane::OutputString when the cast fails.
Assembly: Microsoft.VisualStudio.Shell.Interop.12.0 (in Microsoft.VisualStudio.Shell.Interop.12.0.dll)
Prints text to the output window without pushing a message pump.
When the cast fails, the caller probably has a pointer to the actual output window pane itself (not a wrapper) and thus pumping is not expected to occur. When the cast succeeds (and the underlying COM object is the CSUIBuilder), the behavior of each of the OutputString* methods are as follows:
IVsOutputWindowPane::OutputString: Print message, and pushes a full message pump that processes user input (but no idle messages) including processing to execute commands via keybindings.
IVsOutputWindowPane::OutputStringThreadSafe: Print message, and runs a message pump that just skips processing of IDE keybindings. It is a message pump equivalent to that of a modal dialog (it calls TranslateMessage / DispatchMessage). Note that there is no 'thread-safety' about this method. The same STA COM object implements this method as all other methods on this interface and must be invoked on the UI thread.
IVsOutputWindowPaneNoPump::OutputStringNoPum: Print message. No message pumping at all is done. This is the recommended method to call when available because of its safety against reentrancy to the UI thread that can lead to deadlocks on build/deploy cancellation if the build/deploy cannot complete before the call to OutputString*() must return before the build can be considered finished.