Threading mit mehreren Übergabeparametern und Rückgabeparameter

  • VB.NET
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    Threading mit mehreren Übergabeparametern und Rückgabeparameter

    Hallo, ich will mein Programm schneller machen. Momentan überprüft es die Treffer in einem Datagridview und gibt die Anzahl derer wieder aus.

    VB.NET-Quellcode

    1. Dim _DGV = Me.ElementeDataGridView
    2. Dim cGes As Integer = CInt(IIf(g_Teilfreigabe = True, _DGV.SelectedRows.Count, _DGV.Rows.Count))
    3. Dim cKON_Start As Integer = cAbt(_DGV, "colKON_Start")
    4. Dim cKON_BaugrIO As Integer = cAbt(_DGV, "colKON_BaugrIO")
    5. Dim cSIM_Start As Integer = cAbt(_DGV, "colSIM_Start")
    6. Dim cSIM_BaugrIO As Integer = cAbt(_DGV, "colSIM_BaugrIO")
    7. Dim cDTL_Start As Integer = cAbt(_DGV, "colDTL_Start")
    8. Dim cDTL_BaugrIO As Integer = cAbt(_DGV, "colDTL_BaugrIO")
    9. Dim cKTR_Start As Integer = cAbt(_DGV, "colKTR_Start")
    10. Dim cKTR_BaugrIO As Integer = cAbt(_DGV, "colKTR_BaugrIO")
    11. Dim cLFG_Start As Integer = cAbt(_DGV, "colLFG_Start")
    12. Dim cLFG_BaugrIO As Integer = cAbt(_DGV, "colLFG_BaugrIO")


    VB.NET-Quellcode

    1. Public Function cAbt(ByVal _DGV As DataGridView, ByVal str As String) As Integer
    2. Dim Counter As Integer = 0
    3. If g_Teilfreigabe = True Then
    4. For Each rw As DataGridViewRow In _DGV.SelectedRows
    5. Counter += SingleRowCheck(_DGV, Str, rw)
    6. Next
    7. Else
    8. For Each rw As DataGridViewRow In _DGV.Rows
    9. Counter += SingleRowCheck(_DGV, Str, rw)
    10. Next
    11. End If
    12. Return Counter
    13. End Function
    14. Private Function SingleRowCheck(ByVal _DGV As DataGridView, ByVal str As String, ByVal rw As DataGridViewRow) As Integer
    15. Dim Answer As Integer = 0
    16. Try
    17. Dim b As Nullable(Of Boolean)
    18. Try
    19. b = CType(rw.Cells(str).Value, Boolean?)
    20. Catch ex As Exception
    21. 'no boolean value. Robot is sad :(
    22. End Try
    23. If Len(rw.Cells(str).Value) > 0 Or b = True Then
    24. If rw.Cells(str).Value Is DBNull.Value Then
    25. Answer = 0
    26. Else
    27. Answer = 1
    28. End If
    29. End If
    30. Catch ex As Exception
    31. 'MsgBox(ex.Message & vbCr & "am wahrscheinlichsten wurde gerade ein DBNull.Value erwischt ...")
    32. End Try
    33. Return Answer
    34. End Function


    Gibt es eine einfache Variante, mehrere Parameter zu übergeben und einen Rückgabeparameter in eine Variable zu füllen?
    Nachdem alle Funktionen durchlaufen sind, soll das Programm wieder weiterlaufen.

    Gunngir schrieb:

    Gibt es eine einfache Variante

    Du holst die Daten über ein DGV...
    Wenn du ein gebundenes DGV benutzt, dann hole dir die Daten aus der Datenquelle.
    Try Catch ist ein heißes Eisen
    Len ist ein Relikt aus VB6
    Visual Studio - Empfohlene Einstellungen

    Gunngir schrieb:

    Nachdem alle Funktionen durchlaufen sind, soll das Programm wieder weiterlaufen.
    Das widerspricht sich irgendwie mit dem Threadtitel...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    hallo ihr beiden, danke für die Antworten.

    Welchen Vorteil würde es mir bringen, die Daten aus der Datenquelle zu holen?
    Geschwindigkeit?
    Das DGV kann bearbeitet werden, danach kann das DGV gespeichert - oder diese Routine angeworfen werden.

    Das "Multithreading" ist nur dazu da, um die Zeit zu verringern, die dieser einzelne Schritt braucht.

    Danke für die Tips, werde sie einbinden :)

    nachtrag: ich bin leider an VS2010 / .NET4.0 gebunden. async/await gibt es erst ab VS2012 / .NET4.5

    Dies wäre jedoch genau was ich bräuchte :(

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Gunngir“ ()

    Wenn man ein DGV zur Verfügung hat, dass an eine Datatable im Dataset gebunden ist, dann holt man die Daten zur Weiterverarbeitung nicht aus dem DGV sondern aus der Tabelle. Das DGV dient nicht als Datenzwischenspeicher, sondern dient zur Datenvisualierung und Datenbearbeitung und nicht mehr...
    Ob's damit wesentlich schneller geht, kann ich jetzt nicht beurteilen - denke aber schon...