I have an Extension to Visual Studio 2015 to print source code in color of one or more project items in a project or projects. While the extension is processing project items a progress form is displayed to give the user some feedback. If any projectItem is not Open (using ProjectItem.IsOpen() )then the extension opens it using:
ProjectItem.Open(EnvDTE.Constants.vsViewKindCode)
The extension opens the projectItem to obtain the FileCodeModel so that it can iterate Names, Classes, methods etc.
On the call to ProjectItem.Open causes the progress Form to disappear behind the Visual Studio IDE. Bringing the Progress form to the fron causes very annoying flicker.
Is there any way to achieve this without the flicker? Making the progress form a TopMost windows does the trick but is not ideal as processing all projects items make take while and also VS sometime displays a message that goes behind the progress form causing a lockout.
Here is the test source code:
Private Sub MenuItemCallback(sender As Object, e As EventArgs) Dim objProjectItem As ProjectItem Dim iCounter As Integer Dim objWindow As Window Dim activeDocument As Document = g_DTE.ActiveDocument If activeDocument Is Nothing Then MessageBox.Show("Please open a projectitem in the editor window and try again.") Else objProjectItem = activeDocument.ProjectItem ' Create and initialise a form to show progress Dim frmProgress As New ProgressForm With frmProgress.ProgressBar .Minimum = 1 .Maximum = 500 End With frmProgress.Show() ' Open the same projectitem in a loop to show thw flicker For iCounter = 1 To 500 frmProgress.ShowProgress(iCounter) objWindow = objProjectItem.Open(EnvDTE.Constants.vsViewKindCode) objWindow.Close() Next frmProgress.Close() End If End Sub