Thread-Design-Anfrage

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Tukuan.

    Thread-Design-Anfrage

    Hallo Forum,

    ich habe ein kleines Designproblem und hoffe auf eure Hilfe. Vielleicht gehe ich es auch ganz falsch an und ihr habt eine bessere Idee?

    Ein
    Programm soll Dateien berechnen. Pro Datei kann diese Berechnung schon
    einige Minuten dauern. Allerdings müssen nicht alle Dateien unbedingt
    berechnet werden. Daher soll dieses der User auswählen und ggf. auch
    Einstellungen ändern, bevor die Berechnung gestartet wird.

    In
    einem Datagridview werden pro Datei eine neue Zeile eingefügt. In den
    einzelnen Spalten befinden sich Informationen zur Datei und dann auch
    ein "Berechnungs"-button.
    Die Berechnung soll nun in einem extra
    Thread berechnet werden. Die Ergebnisse der Berechnung stehen in einem
    anderen DGV. In diesem sollen die Ergebnisse ausgegeben werden, sobald
    diese berechnet sind.
    Wie mache ich dieses aus dem Thread heraus oder erstelle ich mir lieber einen Timer, der das DGV updatet?

    In dieser Classe stehen alle Notwenidigen Daten für die Datei - Dateiname und Ort, Einstellungen und Ergebnisse.

    VB.NET-Quellcode

    1. Public Class FileDataSet
    2. Public sFileName As String
    3. Public sFullFileName As String 'with folder
    4. Public nCalculatedState As Integer '0 = Not calculated, 1 = is calculating, 2 = is calculated
    5. Public bUsedForAveCalc As Boolean
    6. Public bUsedAsDiagramMaster As Boolean
    7. Public dK_u_Values(3) As Double
    8. Public dK_f_Values(3) As Double
    9. Public dStartValue As Double
    10. Public dStopValue As Double
    11. Public Sub New()
    12. sFileName = ""
    13. sFullFileName = ""
    14. nCalculatedState = 0
    15. bUsedAsDiagramMaster = False
    16. bUsedForAveCalc = False
    17. For i = 0 To dK_f_Values.Length - 1
    18. dK_f_Values(i) = i
    19. Next
    20. For i = 0 To dK_u_Values.Length - 1
    21. dK_u_Values(i) = i
    22. Next
    23. dStartValue = 0
    24. dStopValue = 0
    25. End Sub
    26. End Class

    Das ganze wird in einem List(of) Array gespeichert.

    Nun will ich ein weiteres Array erstellen, das einen Thread pro Datei bereitstellt.

    Quellcode

    1. Dim toAddThread As New Thread(New cls_SwitchCalc(AddressOf cls_SwitchCalc.CalculateFile))
    2. m_oFileThread.Add(toAddThread)

    Allerdings
    bekomme ich mit der Thread zuweisung im List(of) ne Fehlermeldung, die
    ich leider nicht deuten kann. Was ist daran falsch? Irgendwie finde ich
    nur Beispiele, die sehr viel einfacher sind. Dafür funktioneren sie,
    auch wenn ich es genauso mache... Meine ich jedenfalls.

    Hier die Berechnungs-"Thread"-Klasse

    VB.NET-Quellcode

    1. Class cls_SwitchCalc
    2. Private oFileDataSet As frmSwitchings.FileDataSet
    3. Public Sub New(ByRef oFDS As frmSwitchings.FileDataSet)
    4. oFileDataSet = oFDS
    5. End Sub
    6. Public Sub CalculateFile()
    7. 'mach was mit den Daten und speicher die Ergebnisse in oFileDataSet
    8. oFileDataSet.dK_f_Values(0) = 1
    9. 'usw.
    10. End Sub
    11. End Class



    Ne Frage hab ich auch noch:

    Funktioniert
    die Datenzuweisung mit der "ByRef" Deklaration in der "Thread"-Klasse?
    Greift der Thread auf die geänderten Start- und Stop-Werte zurück

    VB.NET-Quellcode

    1. m_oFileDataSet(e.RowIndex).dStartValue = 2.5
    2. m_oFileDataSet(e.RowIndex).dStopValue = 12.5
    3. m_oFileThread(e.RowIndex).Start()


    Vielen Dank im Voraus
    Liebe Grüße
    Tukuan

    Sorry - hat sich erledigt...

    Ich habe es nun gefunden.
    So muss ich das List(of) Thread deklarieren:

    VB.NET-Quellcode

    1. Dim cls_SwitchCalculation As New cls_SwitchCalc(m_oFileDataSet(i))
    2. Dim toAddThread As New Thread(New ThreadStart(AddressOf cls_SwitchCalculation.CalculateFile))
    3. m_oFileThread.Add(toAddThread)


    Sorry, nun läuft es auch so wie gewollt...