Guten Abend zusammen
ich bin zwar schon relativ lange unter den Programmierern, stehe jedoch im Moment vor einem Problem bei dem ich nicht weiter weiß,
da mir auch kein sinnvoller Suchbegriff für Google einfällt.
Ich habe ein größeres Projekt in dem ich mit verschiedenen Threads arbeite. Um mein Problem einfacher darzustellen habe
ich ein Projekt erstellt welches ziemlich simpel gehalten ist und doch mein Problem wiederspiegelt.
Beim Laden der ersten Form1 erstelle ich eine Liste in einer anderen Klasse (Firmenverwaltung1). Wenn ich diese
Liste direkt erstelle funktioniert alles wie es soll. Erstelle ich diese Liste indem ich einen separaten Thread starte
kann ich zwar die Liste sehen, jedoch können dann angehängte Prozesse dort nicht richtig drauf zugreifen.
Kann sich einer von euch mein Testprojekt mal ansehen?
Der Unterschied zeigt sich wenn man bei dem Form1.load Sub entweder
-Firmenverwaltung1.lade_Firmen <- Ohne neuen Thread
oder
Firmenverwaltung1.Starten <- Mit separaten Thread
aufruft.
Da ich beim Starten des eigentlichen Programmes eine Menge Daten lade wollte ich dies in einem separaten Thread machen.
Danach läuft es aber nicht so wie es soll.
Hier das ganze Projekt auch als Dropboxdownload: dropbox.com/sh/r1c5dmr39jyfl4c…TOSCs9qw4k1IIinoNQ0a?dl=0
ich bin zwar schon relativ lange unter den Programmierern, stehe jedoch im Moment vor einem Problem bei dem ich nicht weiter weiß,
da mir auch kein sinnvoller Suchbegriff für Google einfällt.
Ich habe ein größeres Projekt in dem ich mit verschiedenen Threads arbeite. Um mein Problem einfacher darzustellen habe
ich ein Projekt erstellt welches ziemlich simpel gehalten ist und doch mein Problem wiederspiegelt.
Beim Laden der ersten Form1 erstelle ich eine Liste in einer anderen Klasse (Firmenverwaltung1). Wenn ich diese
Liste direkt erstelle funktioniert alles wie es soll. Erstelle ich diese Liste indem ich einen separaten Thread starte
kann ich zwar die Liste sehen, jedoch können dann angehängte Prozesse dort nicht richtig drauf zugreifen.
Kann sich einer von euch mein Testprojekt mal ansehen?
Der Unterschied zeigt sich wenn man bei dem Form1.load Sub entweder
-Firmenverwaltung1.lade_Firmen <- Ohne neuen Thread
oder
Firmenverwaltung1.Starten <- Mit separaten Thread
aufruft.
Da ich beim Starten des eigentlichen Programmes eine Menge Daten lade wollte ich dies in einem separaten Thread machen.
Danach läuft es aber nicht so wie es soll.
Hier das ganze Projekt auch als Dropboxdownload: dropbox.com/sh/r1c5dmr39jyfl4c…TOSCs9qw4k1IIinoNQ0a?dl=0
Quellcode
- Public Class Form1
- Public WithEvents Firmenverwaltung1 As New Firmenverwaltung
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- 'Firmenverwaltung1.Start()
- Firmenverwaltung1.Lade_Firmen()
- End Sub
- Public Sub Firma_steuern(FirmenName As String, Wert As Integer)
- Dim counter As Integer = 0
- While counter < Firmenverwaltung1.Firmen.Count
- Dim Firma As Firmenverwaltung.Firma = Firmenverwaltung1.Firmen(counter)
- If Firma.Name = FirmenName Then
- Firma.Wert = Firma.Wert + Wert
- Firmenverwaltung1.Firmen(counter) = Firma
- End If
- counter = counter + 1
- End While
- End Sub
- Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
- ListBox1.Items.Clear()
- Dim counter As Integer = 0
- While counter < Firmenverwaltung1.Firmen.Count
- Dim Firma As Firmenverwaltung.Firma = Firmenverwaltung1.Firmen(counter)
- ListBox1.Items.Add(Firma.Name + " - " + Firma.Wert.ToString)
- counter = counter + 1
- End While
- End Sub
- Private Sub NeueFirma(Firma As Firmenverwaltung.Firma) Handles Firmenverwaltung1.Neue_Firma
- Firmenverwaltung1.Firmen.Add(Firma)
- End Sub
- End Class
- Public Class Firmenverwaltung
- Public Structure Firma
- Dim Name As String
- Dim Wert As Integer
- Dim Prozessteuerung_thread As Prozesssteuerung
- End Structure
- Public Firmen As New List(Of Firma)
- Public Event Neue_Firma(Firma As Firma)
- Public Sub Start()
- Dim Ladethread As New Threading.Thread(AddressOf Lade_Firmen)
- Ladethread.IsBackground = False
- Ladethread.Start()
- End Sub
- Public Sub Lade_Firmen()
- Dim Firma1 As New Firma
- Firma1.Name = "Firma 1"
- Firma1.Wert = 0
- Firma1.Prozessteuerung_thread = New Prozesssteuerung
- Firma1.Prozessteuerung_thread.Firmenname = Firma1.Name
- Firma1.Prozessteuerung_thread.Add_Wert = 5
- AddHandler Firma1.Prozessteuerung_thread.Steuern, AddressOf Form1.Firma_steuern
- Firma1.Prozessteuerung_thread.Starten()
- RaiseEvent Neue_Firma(Firma1)
- Dim Firma2 As New Firma
- Firma2.Name = "Firma 2"
- Firma2.Wert = 0
- Firma2.Prozessteuerung_thread = New Prozesssteuerung
- Firma2.Prozessteuerung_thread.Firmenname = Firma2.Name
- Firma2.Prozessteuerung_thread.Add_Wert = 10
- AddHandler Firma2.Prozessteuerung_thread.Steuern, AddressOf Form1.Firma_steuern
- Firma2.Prozessteuerung_thread.Starten()
- Firmen.Add(Firma2)
- End Sub
- End Class
- Public Class Prozesssteuerung
- Public Firmenname As String = ""
- Public Add_Wert As Integer = 0
- Public Event Steuern(Firmenname As String, wert As Integer)
- Dim Steuerungsthread As New Threading.Thread(AddressOf Steuerungssub)
- Public Sub Steuerungssub()
- While True
- Threading.Thread.Sleep(3000) '10 Sekunden pause
- RaiseEvent Steuern(Firmenname, Add_Wert)
- End While
- End Sub
- Public Sub Starten()
- Steuerungsthread.IsBackground = True
- Steuerungsthread.Start()
- End Sub
- End Class