Skip to main content
The World's Best Known Brand for Microsoft Project and Project Server Expertise

Project Server Experts Community Site

Go Search
Project Server Experts Community Site
  
Project Server Experts Community Site > Project Server FAQ KnowledgeBase > SolveCOMExceptionError  

Web Part Page Title Bar image
How to solve the COMException error when using TimeScaleData function and .NET

You May Have Been Automatically Redirected to This Page, Which Has a New Address (URL). Please Update Your Bookmarks / Favorites Accordingly.

Background Information

Using the TimeScaleData function in a C# or VB.NET loop (when iterating through a list), may result in a COMException error. This error is caused by an internal resource limit in Microsoft Project, and because the .NET garbage collector does not clear up the references fast enough.

Resolution

The solution is to call the System.GC.Collect() at the end of the loop. The following is an example that iterates through the assignments of a resource (and does nothing....)

Private Sub transferResData(ByRef res As MSProject.Resource, ByVal startDate As Date, _

        ByVal endDate As Date)

    Dim assign As MSProject.Assignment

    Dim tsv As MSProject.TimeScaleValues

    Dim value As MSProject.TimeScaleValue

 

    Try

        If res.Assignments.Count > 0 Then

            For Each assign In res.Assignments

                If assign.TaskUniqueID > 0 Then

                    tsv = assign.TimeScaleData(startDate, endDate, _

                        MSProject.PjAssignmentTimescaledData.pjAssignmentTimescaledWork, _

                        MSProject.PjTimescaleUnit.pjTimescaleMonths, 1)

                    For Each value In tsv

                        Try

                            ' Do something with the value

                        Catch ex As Exception

                            MsgBox(ex.Message)

                        End Try

                        System.GC.Collect()

                    Next value

                End If

            Next assign

        End If

    Catch ex As Exception

        MsgBox(ex.Message)

    End Try

End Sub

Contributed by Project Server Expert, Hugues Perron

With thanks to Brook Miles for the solution