vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 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
Thread -> Event -> Form aufrufen 
Autor: fixe
Datum: 25.10.06 12:35

Hallo zusammen,

ich habe ein Problem mit einem Thread.
Im Original-Programm wird über einen Timer mehrere Datenbankabfragen hintereinander gestartet, bei einer Abfrage kann ein Event ausgelöst werden.
Dieses Event öffnet dann eine weitere Form. Dies klappt auch alles.
Die Datenbankabfragen dauern aber auch eine gewisse Zeit.

Überlegung ist die Datenbankabfragen in einen Thread auszulagern, damit die Oberfläche bedienbar bleibt und auch auf andere Ereignisse reagiert werden kann.

Das funktioniert auch soweit.
Das Problem liegt im Aufruf der weiteren Form FormBildAuffruf, mit Ende des Thread verschwindet diese auch, soll aber solange erhalten bleiben bis sie manuell geschlossen wird.

Habe mal ein kleines Beispielprogramm geschrieben um die Sache zu verdeutlichen.

Hauptform: TestThreadForm mit Button btnThreadStarten, Label1 und Label2
Form Aufruf über Event: FormBildAufruf mit Label1 und Button btnStop
Klasse: ClassZaehler

TestThreadForm:
Imports System
Imports System.Windows.Forms
Imports System.Threading
 
Public Class TestThreadWinForm
 
    Dim FormBild As FormBildAufruf
 
    Private Sub btnThreadStarten_Click(ByVal sender As System.Object, ByVal e _
      As System.EventArgs) Handles btnThreadStarten.Click
        Dim thThreadtest As New Thread(AddressOf threadBehandlung)
        thThreadtest.IsBackground = True
        thThreadtest.Start()
    End Sub
 
    Sub threadBehandlung()
        Dim intTest As Integer
        Dim clsZahl As New ClassZaehler(1000)
         AddHandler clsZahl.ZaehlSchleifeWert, AddressOf clsZahlWertErreicht
        Try
            intTest = clsZahl.ZaehlSchleife()
        Catch ex As Exception
            MessageBox.Show("Fehler Ausführen Klasse ClassZaehler " & _
                Environment.NewLine & ex.Message & Environment.NewLine & _
                ex.ToString)
        Finally
            SetValue("Durchlauf TestThread-Nr.: " & intTest.ToString, Label1)
        End Try
     End Sub
 
    Sub clsZahlWertErreicht(ByVal sender As Object, ByVal e As _
      System.EventArgs, ByVal inttest As Integer)
        FormBild = New FormBildAufruf
        FormBild.strText = "intTest: " & inttest.ToString
        FormBild.Show()
        FormBild.TopMost = True
    End Sub
 
   Delegate Sub SetValueCallback(ByVal text As String, ByVal ctl As Control)
 
    Private Sub SetValue(ByVal text As String, ByVal ctl As Control)
              If Me.InvokeRequired Then
            Dim del As New SetValueCallback(AddressOf SetProgressValue)
                     Invoke(del, text, ctl)
        Else
            Me.Text = text
        End If
    End Sub
 
    Sub SetProgressValue(ByVal strtext As String, ByVal ctl As Control)
        Label2.Text = strtext
        ctl.Text = strtext
    End Sub
End Class
FormBildAufruf:
Public Class FormBildAufruf
 
    Private m_strText As String
    Property strText() As String
        Get
            Return m_strText
        End Get
        Set(ByVal value As String)
            m_strText = value
        End Set
    End Property
 
    Private Sub FormBildAufruf_Load(ByVal sender As Object, ByVal e As _
      System.EventArgs) Handles Me.Load
        Label1.Text = strText
    End Sub
 
    Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles btnStop.Click
        Me.Close()
    End Sub
End Class
ClassZaehler:
Imports System.Threading
 
Public Class ClassZaehler
    Sub New(ByVal IintI As Integer)
        intI = IintI
    End Sub
 
    Private m_intI As Integer
    Property intI() As Integer
        Get
            Return m_intI
        End Get
        Set(ByVal value As Integer)
            m_intI = value
        End Set
    End Property
 
    Public Event ZaehlSchleifeWert(ByVal sender As Object, ByVal e As _
      System.EventArgs, ByVal intTest As Integer)
 
    Function ZaehlSchleife() As Integer
 
        For i As Integer = 0 To intI
            Console.WriteLine("Durchlauf TestThread-Nr.: " & i.ToString)
            If i = 500 Then
                RaiseEvent ZaehlSchleifeWert(Me, New System.EventArgs, i)
            End If
            Thread.Sleep(100)
        Next
 
        Return intI
    End Function
End Class
Gibt es eine Möglichkeit FormBildAufruf solange erscheinen zu lassen, bis sie manuell beendet wird?
Oder ist dies die komplett falsche Vorgehensweise?

MfG

Ulrich
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Thread -> Event -> Form aufrufen982fixe25.10.06 12:35
Re: Thread -> Event -> Form aufrufen605ModeratorFZelle25.10.06 19:15

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