Hallo zusammen,
ich habe eine kleine App geschrieben, welche dynamische Controls timer gesteuert auf eine Form bzw. in Groupboxen added (z.B. Pictureboxes).
Ebenso werden diese Controls wieder removed und wieder neu erzeugt. Irgendwann bleibt alles stehen. Ich habe schon versucht mit dem Garbage Collector die Ressourcen wieder frei zu geben.
Hier ein Paar Snippets:
Public Sub add_new_control_with_data_members(ByVal Title As String, ByVal Name _
As String, ByVal TableData As String, ByVal ErsteHilfe As Boolean, ByVal Type _
As String)
Try
'neue Controls definieren
Dim new_grp As New GroupBox
Dim new_table As New DataGridView
Dim new_Name_Label As New Label
Dim new_picture As New PictureBox
Dim new_pic_red_cross As New PictureBox
new_grp.Width = 300
new_grp.Height = frm_main.flow_panel_member.Height - 25
new_grp.ForeColor = Color.Blue
new_grp.Text = Title
new_grp.Name = Trim("grp_" & Name)
new_grp.Font = New Font("Arial", 14, FontStyle.Bold)
new_grp.ForeColor = Color.Blue
Select Case Type
Case "ADMIN"
frm_main.flow_panel_admin.Controls.Add(new_grp)
frm_main.flow_panel_admin.Refresh()
Case "MEMBER"
frm_main.flow_panel_member.Controls.Add(new_grp)
frm_main.flow_panel_member.Refresh()
End Select
new_grp.Refresh()
new_Name_Label.Text = Replace(Name, " ", vbCrLf)
new_Name_Label.Left = 5
new_Name_Label.Top = 40
new_Name_Label.AutoSize = True
new_Name_Label.Font = New Font("Arial", 14, FontStyle.Bold)
new_Name_Label.ForeColor = Color.Black
new_grp.Controls.Add(new_Name_Label)
new_pic_red_cross.Width = 30
new_pic_red_cross.Height = 30
new_pic_red_cross.Top = new_Name_Label.Bottom - _
new_Name_Label.Height
new_pic_red_cross.Left = new_grp.Width / 2
new_pic_red_cross.Name = "red_" & Trim(Name)
new_pic_red_cross.SizeMode = PictureBoxSizeMode.Zoom
If ErsteHilfe = True Then
new_pic_red_cross.Load(RedCrossImage)
End If
new_grp.Controls.Add(new_pic_red_cross)
new_picture.Name = Trim(Now.Ticks)
Dim tmp_name As String = Replace(Name, ",", "")
If File.Exists(UserPicturePath & "\" & Replace(tmp_name, " ", "_") _
& ".jpg") = True Then
new_picture.Load(UserPicturePath & "\" & Replace(tmp_name, " ", _
"_") & ".jpg")
Else
new_picture.Load(DefaultImage)
End If
new_picture.Width = new_grp.Width * 0.33
new_picture.Height = ((new_picture.Width / 4) * 3)
new_picture.BorderStyle = BorderStyle.FixedSingle
new_picture.SizeMode = PictureBoxSizeMode.Zoom
new_picture.Left = new_grp.Width - new_picture.Width - 5
new_picture.Top = 20
new_grp.Controls.Add(new_picture)
new_table.Name = "tbl_" & Name
new_table.Left = new_Name_Label.Left
new_table.Top = new_picture.Bottom + 10
new_table.Width = new_grp.Width - 10
new_table.Height = new_grp.Height - new_table.Top - 10
new_table.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
new_table.AlternatingRowsDefaultCellStyle.BackColor = _
Color.LightGreen
new_table.AllowUserToDeleteRows = True
new_table.AllowUserToResizeRows = False
new_table.AllowUserToResizeColumns = False
new_table.AllowUserToAddRows = False
new_table.RowHeadersVisible = False
new_table.ColumnHeadersBorderStyle = _
DataGridViewHeaderBorderStyle.Single
new_table.BackgroundColor = Color.White
new_table.BorderStyle = BorderStyle.FixedSingle
new_table.ReadOnly = True
new_table.Font = New Font("Arial", 10, FontStyle.Regular)
new_table.DataSource = SQL_dataset.Tables(TableData)
new_grp.Controls.Add(new_table)
new_table.Columns(SQL_dataset.Tables(TableData).Columns( _
"Produkt").ColumnName).MinimumWidth = 170
new_table.ClearSelection()
frm_main.flow_panel_member.Refresh()
...
End Sub Hier vom Löschen der Controls:
frm_main.flow_panel_admin.Controls.Clear() Vor jedem Timer Tick lasse ich den Garbage Collector sammeln...
aber freigegeben wird der Speicher nicht.
Kann mir jemand von Euch weiterhelfen?
Greetz SuperEbse |