vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Aktive Threads verschiedener Instanzen/Klassen anzeigen lassen (z.B. in Lisbox) 
Autor: Bibobernie
Datum: 21.10.12 15:47

Hallo

In meinem Programm verwende ich Threads welche von verschiedenen Geräten Daten über serielle Schnittstellen abzufragen. Das funktioniert super. Auch das starten und stoppen eines einzelnen Threads gelingt gut. Nun wollt ich mir aber gern alle aktiven Threads anzeigen lassen (z.B. in einer Listbox). Zum einen aus Neugier, zum anderen als Kontrolle ob auch wirklich alle Threads laufen.

Hier aber erst einmal ein Beispiel wie ich die Threads prinzipiell erzeuge:

Basisklasse:

Public MustInherit Class Basis
 
'Konstruktoren, Code usw. 
 
    Private Read_Thread As Thread
 
    ''' <summary>
    ''' Diese Sub dient dazu separate Threads zu starten welche mittels Polling 
    ' den seriellen Port überwachen.
    ''' </summary>
    ''' <remarks></remarks>
    Friend Sub Starte_Überwachung()
 
        If Not Read_Thread Is Nothing Then
            If Read_Thread.IsAlive Then Exit Sub 'Nur einen Thread zulassen
        End If
 
        Read_Thread = New Thread(Sub() ReadSerialPort())
        With Read_Thread
            .IsBackground = True
            .Priority = ThreadPriority.BelowNormal
            .Name = _bezeichnung & " Lesethread"
            .Start()
        End With
 
    End Sub
 
    ''' <summary>
    ''' Beenden des Lesethreads.
    ''' </summary>
    ''' <remarks></remarks>
    Friend Sub Beende_Überwachung()
 
        Read_Thread.Abort()
 
    End Sub
 
    ''' <summary>
    ''' Methode zur Überwachung der Ports. 
    ''' </summary>
    ''' <remarks></remarks>
    Friend MustOverride Sub ReadSerialPort()
 
End Class
Genutzt wird das ganze in einer Child-Klasse (hier mal Gerät_A) über die Methode ReadSerialPort:

Public Class Gerät_A
Inherits Basis
 
'Konstruktoren, Code usw. 
 
    Friend Overrides Sub ReadSerialPort()
        Try
            Do While True
 
                Read_AllChannels()
 
            Loop
 
        Catch ex As ThreadInterruptedException
            Fehlerbehandlung(Fehlercodes.Thread_Interrupt, ex.Message)
        Catch ex As ThreadAbortException
            Fehlerbehandlung(Fehlercodes.Thread_Abbruch, ex.Message)
        Catch ex As Exception
            Fehlerbehandlung(Fehlercodes.Unbekannter_Fehler, ex.Message)
        End Try
 
    End Sub
 
End Class
Bisher nutzen drei verschiedene Child-Klassen diese Methode um über einen Port zu Kommunizieren. In meinem Programm erzeuge ich mir dann die jeweiligen Objekte und nutze die Threads darin. Wie ich nun aber die Threads anzeigen lassen kann ist mir (noch) völlig unklar.

Eventuell hat jemand ja nen konkreten Tipp für mich. Ach ja, und falls was gravierend falsch an dem obigen Code sein sollte bitte ich um hinweise. Ich bin ja immer am lernen;).

Ahnungsloser ahnungsloser...

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Aktive Threads verschiedener Instanzen/Klassen anzeigen lassen (z.B. in Lisbox) 
Autor: Micke
Datum: 23.10.12 15:48

weiß nicht ob du das meinst -
um von Gerät_A auf den thread zugreifen zu können mußt du "Protected o. Public Read_Thread As Thread" deklarieren

Micke

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Aktive Threads verschiedener Instanzen/Klassen anzeigen lassen (z.B. in Lisbox) 
Autor: Bibobernie
Datum: 23.10.12 16:33

Ne, das meinte ich nicht, ich suche nach einer Methode mit welcher ich mich anzeigen lassen kann ob das Programm aktuell Hintergrundthreads laufen hat und wie diese heißen. Der nächste schritt wäre dann sicherlich noch einzelne Threads davon zu beenden bzw. neue zu starten. Aber bisher hab ich noch nicht wirklich nen Plan wie ich das ganze anstellen soll...

Ahnungsloser ahnungsloser...

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Aktive Threads verschiedener Instanzen/Klassen anzeigen lassen (z.B. in Lisbox) 
Autor: ModeratorDaveS (Moderator)
Datum: 23.10.12 17:00

Du erstellst die Threads in Klassenobjekten, du kannst ein wenig Buchhaltung machen (List, Dictionary) um zu wissen was läuft. Und die Threads heißen wie immer du sie genannt hast. Entweder mit .Name-Eigenschaft oder einem Feld in deiner Klasse.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Aktive Threads verschiedener Instanzen/Klassen anzeigen lassen (z.B. in Lisbox) 
Autor: Bibobernie
Datum: 23.10.12 17:17

Hallo

Wie meinst du das mit der Buchhaltung? Ne eigene Klasse erstellen welche alle Threads Managed? Wenn ja, hast du eventuell nen Beispiellink wo sowas im Ansatz beschrieben wird?

Ahnungsloser ahnungsloser...

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Aktive Threads verschiedener Instanzen/Klassen anzeigen lassen (z.B. in Lisbox) 
Autor: keco
Datum: 23.10.12 17:50

Wenn du die Threads erstellt hast, dann füge sie einfach einer Liste (o.ä.) hinzu, auf die du zugreifen kannst. Das war damit gemeint.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel