none
Task mit mehreren Parametern füllen und starten RRS feed

  • Frage

  •  Hallo NG,

    ich habe eine Prozedur, die sich rekursiv selbst aufruft. Der Durchlauf dieser Prozedur kann einige Zeit in Anspruch nehmen. Der Fortschritt des Prozesses wird über einen Event an eine Progressbar in einer anderen Form übermittelt. Der Vorgang funktioniert soweit. Um die Rechnerkapazität besser auszunutzen würde ich nun gerne mithilfe von Task´s die Prozedur in mehreren Threads gleichzeitig laufen lassen. Das habe ich jedoch bis jetzt nicht hinbekommen.

    Ich bekomme die Übergabe der Parameter, die für die Rekursivität erforderlich sind, nicht hin. Ein weiteres Problem ist die Frage, wie erfahre ich, dass alle Task´s bearbeitet worden sind?

     

    Public Sub GetAllReferentedDocumentsInventorDatei(ByVal FullDateiname As String, ByRef KatalogJN As Boolean, ByRef InventorDateiDI As Dictionary(Of String, InventorDatei)) Dim oAS As New Inventor.ApprenticeServerComponent Dim oAD As Inventor.ApprenticeServerDocument Dim oADC As Inventor.ApprenticeServerDocuments Dim DocDesEnum As Inventor.DocumentDescriptorsEnumerator Dim DocDes As Inventor.DocumentDescriptor Try RaiseEvent SetNextStep() If FileSystem.ExistsFile(FullDateiname) Then If Not InventorDateiDI.ContainsKey(FullDateiname) Then '### dieser Schritt braucht die meiste Zeit Dim InventorDatei As New InventorDatei(FullDateiname) '#################################################### InventorDateiDI.Add(FullDateiname, InventorDatei) RaiseEvent SetNextStep() End If oAD = oAS.Open(FullDateiname) RaiseEvent SetNextStep() oADC = oAD.AllReferencedDocuments RaiseEvent SetNextStep() DocDesEnum = oAD.ReferencedDocumentDescriptors If DocDesEnum.Count > 0 Then For Each DocDes In DocDesEnum RaiseEvent SetNextStep() If Not InventorDateiDI.ContainsKey(DocDes.FullDocumentName) Then Dim InventorDatei As New InventorDatei(DocDes.FullDocumentName) InventorDateiDI.Add(DocDes.FullDocumentName, InventorDatei) '?????????????????????????????????????????? Dim AufrufmitParameter As Action(Of Object, Object) = Sub(s As Object, s1 As Object) GetAllReferentedDocumentsInventorDatei(DocDes.FullDocumentName, DirectCast(s, Boolean), DirectCast(s1, Dictionary(Of String, InventorDatei))) End Sub Dim newThread1 As New Task(AufrufmitParameter, KatalogJN, InventorDateiDI) newThread1.Start() '????????????????????????????????????????????? '############################# 'Lösung die funktioniert, aber Zeit braucht 'GetAllReferentedDocumentsInventorDatei(DocDes.FullDocumentName, KatalogJN, InventorDateiDI) '############################# RaiseEvent SetNextStep() End If Next End If oAS.Close() End If Catch ex As Exception MessageBox.Show("GetAllReferentedDocumentsInventorDatei" & Chr(10) & ex.ToString, "Fehler 1062", MessageBoxButtons.OK) oAS.Close() End Try End Sub



    Mit freundlichen Grüßen Dipl. Ing. Joachim Schmäck

    Samstag, 30. Juli 2016 10:17

Antworten

Alle Antworten