VB.NET图表中显示的红色X

VB.NET图表中显示的红色X,vb.net,memory,charts,Vb.net,Memory,Charts,我有计算坦克上多个点的应力的代码,然后将这些应力绘制在图表上。我将毫无问题地查看图表,突然,图表显示红色X,我需要关闭程序再次查看压力结果 我知道我的代码中没有bug。没有抛出异常。有什么建议吗 Public Sub Graph(Curves) 'Creates the Graphs crtStressData.Series.Clear() crtStressData.Legends.Clear() 'Dimension arrays for data poin

我有计算坦克上多个点的应力的代码,然后将这些应力绘制在图表上。我将毫无问题地查看图表,突然,图表显示红色X,我需要关闭程序再次查看压力结果

我知道我的代码中没有bug。没有抛出异常。有什么建议吗

    Public Sub Graph(Curves) 'Creates the Graphs
    crtStressData.Series.Clear()
    crtStressData.Legends.Clear()
    'Dimension arrays for data points
    FileClose()
    Dim data As Double
    Dim StressTitle As String
    Dim k As Integer
    Dim BorderSize As Integer = 4
    'set up main graph
    crtStressData.ChartAreas(0).CursorX.IsUserSelectionEnabled = True
    crtStressData.ChartAreas(0).CursorY.IsUserSelectionEnabled = True
    crtStressData.ChartAreas(0).AxisX.ScaleView.Zoomable = True
    crtStressData.ChartAreas(0).AxisY.ScaleView.Zoomable = True
    crtStressData.ChartAreas(0).AxisX.ScrollBar.IsPositionedInside = False
    crtStressData.ChartAreas(0).AxisY.ScrollBar.IsPositionedInside = False
    Dim LegendName As String = ""
    StressTitle = TankName + " " + GraphType + " Stresses: " + strLoad + " Loading"
    If GraphType = "Combined" Then
        'Set component parameters
        'Create Combined Graph
        Call CreateDataPoints()
        'Add title, 
        crtStressData.Titles(0).Text = StressTitle
        For i = 0 To Curves - 1 'add legends
            If i = 0 Then
                LegendName = "Minimum Principal Stress"
            ElseIf i = 1 Then
                LegendName = "Minimum Principal Stress Location"
            ElseIf i = 2 Then
                LegendName = "Maximum Principal Stress"
            ElseIf i = 3 Then
                LegendName = "Maximum Principal Stress Location"
            End If
            crtStressData.Series.Add(LegendName)
            ''work on legend name
            crtStressData.Series(i).ChartType = DataVisualization.Charting.SeriesChartType.Line 'sets as a line graph
            crtStressData.Series(i).XAxisType = DataVisualization.Charting.AxisType.Primary
            crtStressData.Series(i).YAxisType = DataVisualization.Charting.AxisType.Primary
            crtStressData.Series(i).BorderWidth = BorderSize
            For j = 0 To MaxDataPoints 'add points per legend type
                'set up which data to add and define color
                If i = 0 Then
                    '   StressType(k) = "Minimum Principal Stress"
                    data = SMINMAXData(j)
                    color = Drawing.Color.Blue
                ElseIf i = 1 Then
                    '      StressType(k) = "Minimum Principal Stress Location"
                    data = SMINLOCData(j)
                    color = Drawing.Color.Green
                ElseIf i = 2 Then
                    'StressType(k) = "Maximum Principal Stress"
                    data = SMAXMAXData(j)
                    color = Drawing.Color.DodgerBlue
                ElseIf i = 3 Then
                    ' StressType(k) = "Minimum Principal Stress Location"
                    data = SMAXLOCData(j)
                    color = Drawing.Color.Red
                End If
                'add data and color
                crtStressData.Series(i).Points.AddXY(XPosData(j), data)
                crtStressData.Series(i).Color = color
            Next
            k = k + 1
        Next
    Else ' GraphType = "Components" 
        crtStressData.Series.Clear()
        'Set component parameters
        'Create Component Graph
        Call CreateDataPoints()
        'Add title and axes labels
        crtStressData.Titles(0).Text = StressTitle
        For i = 0 To Curves - 1 'add legends
            If i = 0 Then
                LegendName = "Bending"
            ElseIf i = 1 Then
                LegendName = "Pressure (X)"
            ElseIf i = 2 Then
                LegendName = "Tension (X)"
            ElseIf i = 3 Then
                LegendName = "Total (X)"
            ElseIf i = 4 Then
                LegendName = "Pressure (Y)"
            ElseIf i = 5 Then
                LegendName = "Shear"
            End If
            crtStressData.Series.Add(LegendName) 'creates line
            crtStressData.Series(i).ChartType = DataVisualization.Charting.SeriesChartType.Line 'sets as a line graph
            crtStressData.Series(i).XAxisType = DataVisualization.Charting.AxisType.Primary
            crtStressData.Series(i).YAxisType = DataVisualization.Charting.AxisType.Primary
            crtStressData.Series(i).BorderWidth = BorderSize
            For j = 0 To MaxDataPoints 'add points per legend
                If i = 0 Then
                    'StressType(k) = "Bending"
                    data = SXBMAXData(j)
                    color = Drawing.Color.Blue
                ElseIf i = 1 Then
                    '    StressType(k) = "Pressure (X)"
                    data = SXPMAXData(j)
                    color = Drawing.Color.Green
                ElseIf i = 2 Then
                    '   StressType(k) = "Tension (X)"
                    data = SXTMAXData(j)
                    color = Drawing.Color.DodgerBlue
                ElseIf i = 3 Then
                    'StressType(k) = "Total (X)"
                    data = SXMAXData(j)
                    color = Drawing.Color.Red
                ElseIf i = 4 Then
                    '    StressType(k) = "Pressure (Y)"
                    data = SYMAXData(j)
                    color = Drawing.Color.HotPink
                ElseIf i = 5 Then
                    ' StressType(k) = "Shear"
                    data = SSMAXData(j)
                    color = Drawing.Color.DarkOrange
                End If
                'add data and color
                crtStressData.Series(i).Points.AddXY(XPosData(j), data)
                crtStressData.Series(i).Color = color
            Next
            k = k + 1
        Next
    End If
    'LEGEND
    Dim StressLegend As Legend = New Legend()
    StressLegend.IsDockedInsideChartArea = False
    StressLegend.Docking = Docking.Bottom
    StressLegend.Font = New Font("Gil Sans MT", 11)
    StressLegend.TextWrapThreshold = 100
    StressLegend.Alignment = StringAlignment.Center
    crtStressData.Legends.Add(StressLegend)
    crtStressData.Dock = DockStyle.None
    crtStressData.Show()
End Sub

您的程序很可能已耗尽分配给它的图形内存。如果某些控件不再使用,您可能需要随着时间的推移处理它们。您可以发布绘图代码吗?如@rory.ap所述;您应该处理与图形相关的对象。代码已发布。我想我不确定将行“crtStressData.dispose()”放在何处。此图表是在设计中定义的,因此我无法在运行时真正处理它,如果您知道我的意思,当控件的OnPaint()方法或Paint事件引发异常时,您将看到红色的X。所以有一个例外,但是它在生成X时被捕获。你需要找出原因。使用调试>窗口>异常设置并勾选“CLR异常”复选框,以在引发异常时强制调试器停止。