Hallöchen alle miteinander,
ich habe folgendes Problem und weiß nicht ob mein Lösungsversuch der sinnvollste ist.
Ich habe eine Windowsform aus der ich beim Start Threads aufrufe (derzeit 50--> werden aber mehr) In den Threads sind lediglich zwei Sub´s angelegt. Allerdings sollen die Threads im Hintergrund auf Events warten. Die Events werden durch ein externes Programm ausgelöst.Auf das Programm greife ich über eine COM-Schnittstelle zu. Dies funktioniert soweit auch. Allerdings fährt sich der Hauptthread nach einiger zeit fest bzw friert ein.... Wird ein Event bei einem Thread ausgelöst, übergebe ich Parameter an mein Hauptthread und versende von dort dann E-Mails. Habe im Netz viel gefunden mit Delegate und Invoke. Bin mir aber nicht sicher ob ich die richtig anwende.... Hier mal die wichtigstens Sub´s
Also wie gesagt, es funktioniert zunächst so alles, allerdings nach einiger Zeit fährt sich das ganze fest. Kann es daran liegen, dass die Threads einfrieren da sie einige Zeit "gar nix" machen oder ist der Aufruf it Delegat und Invoke falsch?!?
Was ich erreichen möchte, ist ein aufruf für ein Hintergundprogramm, welches auf die Events des externen Programm wartet ( kann auch mal Tage dauern oder in ms- Bereich kommen). Dieses muss von dort aus Parameter in mein Hauptptoramm übergeben und auf das Datagridview des Hauptprogrammes zugriff haben.
Ich danke euch für jeden Tipp!!!
ich habe folgendes Problem und weiß nicht ob mein Lösungsversuch der sinnvollste ist.
Ich habe eine Windowsform aus der ich beim Start Threads aufrufe (derzeit 50--> werden aber mehr) In den Threads sind lediglich zwei Sub´s angelegt. Allerdings sollen die Threads im Hintergrund auf Events warten. Die Events werden durch ein externes Programm ausgelöst.Auf das Programm greife ich über eine COM-Schnittstelle zu. Dies funktioniert soweit auch. Allerdings fährt sich der Hauptthread nach einiger zeit fest bzw friert ein.... Wird ein Event bei einem Thread ausgelöst, übergebe ich Parameter an mein Hauptthread und versende von dort dann E-Mails. Habe im Netz viel gefunden mit Delegate und Invoke. Bin mir aber nicht sicher ob ich die richtig anwende.... Hier mal die wichtigstens Sub´s
VB.NET-Quellcode
- Public Class start
- Public Delegate Sub Alarmauswertung(ByVal oAnlage As String, ByVal oName As String, ByVal oText As String, ByVal oAdresse As String, ByVal oValue As String, ByVal oKlasse As String, ByVal oGruppe As String, ByVal oTimescomes As Date, ByVal oRechnername As String, ByVal oServer As String, ByVal oAlarmgruppe As String)
- Public myDelegate As Alarmauswertung
- Public ZenNam_Arr(0) As String
- Public DerEventzaehler As Integer = 0
- Private Sub start_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- For Me.DerEventzaehler = 0 To ZenNam_Arr.Length - 1
- Dim alarmeventT As New Alarm_EventsT(nameProject, ZenNam_Arr(DerEventzaehler), Me)
- Dim TEventAlarmThread As New Thread(AddressOf alarmeventT.lesen)
- TEventAlarmThread.Start()
- Next
- End Sub
- end class
- 'Im folgenden kommt die Klasse die als Thread aufgerufen wird
- Public Class Alarm_EventsT
- Public Sub New(ByVal Proj_Name As String, ByVal Z_Proj As String, ByVal myForm As start)
- Try
- ePrjname = Proj_Name
- eZenPrj = Z_Proj
- myFormControl1 = myForm
- Catch ex As Exception
- End Try
- End Sub
- Public Sub zAlarm_Proj_AlarmComes(ByVal obItem As AlarmItem) Handles zAlarm_Proj.AlarmComes
- Dim _Alarmgruppe As String
- Dim oName As String = obItem.Name.ToString
- Dim oValue As String = obItem.Tagname.ToString
- Dim oTimescomes As Date = obItem.Timecomes
- Dim oTimesgoes As Date = obItem.Timecomes
- Dim oGruppe As String = obItem.AlarmGroup.ToString
- Dim oText As String = obItem.Text.ToString
- Dim oKlasse As String = obItem.AlarmClass
- Dim oAnlage As String = obItem.Projectname.ToString
- Dim fail As Integer = 0
- Try
- myFormControl1.BeginInvoke(myFormControl1.myDelegate, New Object() {oAnlage, oName, oText, start.TextBox2.Text, oValue, oKlasse, oGruppe, oTimescomes, Rechnername, Server, _Alarmgruppe})
- fail = 5
- Catch ex As Exception
- End Try
- End Sub
- end class
Also wie gesagt, es funktioniert zunächst so alles, allerdings nach einiger Zeit fährt sich das ganze fest. Kann es daran liegen, dass die Threads einfrieren da sie einige Zeit "gar nix" machen oder ist der Aufruf it Delegat und Invoke falsch?!?
Was ich erreichen möchte, ist ein aufruf für ein Hintergundprogramm, welches auf die Events des externen Programm wartet ( kann auch mal Tage dauern oder in ms- Bereich kommen). Dieses muss von dort aus Parameter in mein Hauptptoramm übergeben und auf das Datagridview des Hauptprogrammes zugriff haben.
Ich danke euch für jeden Tipp!!!