Moin,
ich habe mir einen Simplen Thread gebastelt, der ein Gridview löschen, refreshen oder resizen soll. Der läuft in einer Dauerschleife und verursacht bei mir anscheinend ein erhöhten Speicherbedarf bis die Anwendung aussteigt.
Ich bin noch ein wenig Greenhorn wenn es um Threading geht, daher meine frage, was mache ich falsch?
Das ist mein Thread:
Und so starte ich den Thread:
Wäre über Tips echt dankbar
ich habe mir einen Simplen Thread gebastelt, der ein Gridview löschen, refreshen oder resizen soll. Der läuft in einer Dauerschleife und verursacht bei mir anscheinend ein erhöhten Speicherbedarf bis die Anwendung aussteigt.
Ich bin noch ein wenig Greenhorn wenn es um Threading geht, daher meine frage, was mache ich falsch?
Das ist mein Thread:
VB.NET-Quellcode
- Private Delegate Sub ResizeColumnsDelegate()
- Private Delegate Sub ClearAlarmboxDelegate()
- Private Delegate Sub AlarmboxRefreshDelegate()
- Private Delegate Sub WriteAlarmboxDelegate(Datetime As String, Group As String, Text As String)
- Private Sub Alarmdatenlesen()
- Dim DeliResize As New ResizeColumnsDelegate(AddressOf ResizeColumns)
- Dim DeliWrite As New WriteAlarmboxDelegate(AddressOf WriteAlarmbox)
- Dim DeliClear As New ClearAlarmboxDelegate(AddressOf ClearAlarmbox)
- Dim DeliRefresch As New AlarmboxRefreshDelegate(AddressOf AlarmboxRefresh)
- SyncLock Me
- While True
- If (Me.InvokeRequired) Then
- Me.Invoke(DeliResize)
- Else
- Me.ResizeColumns()
- End If
- If Not Main._SendRecieve.Connectionstate Then
- If (Me.InvokeRequired) Then
- Me.Invoke(DeliResize)
- Me.Invoke(DeliClear)
- Me.Invoke(DeliWrite, Date.Now.ToString, "PLC", "No Connetion")
- Else
- Me.ResizeColumns()
- Me.ClearAlarmbox()
- Me.WriteAlarmbox(Date.Now.ToString, "PLC", "No Connetion")
- End If
- End If
- If (Me.InvokeRequired) Then
- Me.Invoke(DeliRefresch)
- Else
- Me.AlarmboxRefresh()
- End If
- Thread.Sleep(500)
- End While
- End SyncLock
- End Sub
Und so starte ich den Thread:
VB.NET-Quellcode
- Private AlarmThread As New Thread(New ThreadStart(Sub() Alarmdatenlesen()))
- Sub New() 'ByRef Alarmtable As Alarmboxdatatable)
- 'Nicht zur Designzeit ausfuehren:
- If System.ComponentModel.LicenseManager.UsageMode = System.ComponentModel.LicenseUsageMode.Designtime Then Return
- ' Dieser Aufruf ist für den Designer erforderlich.
- InitializeComponent()
- 'Werte aus der Einstellung uebernehmen
- Me.Columns.Clear()
- DataGridSettings()
- 'Lese -und Schreibethread starten
- AlarmThread.IsBackground = True
- AlarmThread.Start()
- 'Me.DataSource = Alarmtable
- Me.DoubleBuffered = True
- RemoveHandler MyBase.Resize, AddressOf Alarmbox_Resize
- AddHandler MyBase.Resize, AddressOf Alarmbox_Resize
- End Sub
Wäre über Tips echt dankbar