MYSQLconnector + Timer = stockende form ? =(

Ich habe ein Problem .

Und zwar ...

Wenn ich eine Form mache die im Timer eine connection aufbaut und auch wieder schließt und mir halt daten übermittelt
und diese anschließend in einer Listbox zb. darstellt dann fängt die Form an zu stocken und zwar immer in der Intervalzeit des Timers.

Gibt es vlt eine bessere lösung als einen Timer um die Daten aktuell zu halten?
 
Du willst die angezeigten Daten aktuell halten? Wie oft ändern sich denn diese Daten, dass du da mit einem Timer drauf zugreifen musst? Und was passiert bei Änderungen in deiner GUI?
 
Es wird nach einem login eine Session erstellt die ich dann abfragen will.
Über die Sessions will ich halt eine Online anzeige erstellen.
Da dies möglichst genau sein soll , wollte ich dies via Timer lösen .
Allerdings kam es dann zu den Problem das die Forms anfangen zu stocken.

Die Daten können sich recht schnell ändern und wenn jemand aus der Session gelöscht wird soll dies auch möglichst zeitgleich angezeigt werden.
Wie gesagt hatte ich es bisher per timer gelöst was auch soweit funktioniert nur stockt die form beim verscheiben sowie bei texteingaben und anderen möglichen Aktionen.
 
Nun ich weiss nicht obs weiter hilft bei der Lösung des Laagproblems.
Aber hier mal die Syntax:
Code:
Public Class Form1
    Dim myData As New DataSet
    Dim cmd As New MySql.Data.MySqlClient.MySqlCommand
    Dim myAdapter As New MySql.Data.MySqlClient.MySqlDataAdapter
    Dim myConnection As New MySql.Data.MySqlClient.MySqlConnection("server=eineseite.de;" _
        & "uid=dbuser;" _
        & "pwd=dbpw;" _
        & "database=db;")


    Dim online As String
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim mySelectQuery As String = "SELECT Username FROM tbl_session"







        Dim myCommand As New MySql.Data.MySqlClient.MySqlCommand(mySelectQuery, myConnection)




        Try
            If myConnection.State <> ConnectionState.Open Then
                myConnection.Open()
            End If
            Try

                Dim onlinecount As Integer = 0
                cmd.Connection = myConnection



                Dim myReader As MySql.Data.MySqlClient.MySqlDataReader

                myReader = myCommand.ExecuteReader()
                While myReader.Read()

                    Dim kontaktid As String = myReader("Username").ToString
                    If online <> kontaktid Then

                        online = kontaktid
                        ListBox1.Items.Add(online)
                    End If
                End While



                myReader.Close()
            Catch myerror As MySql.Data.MySqlClient.MySqlException
                MsgBox("There was an error reading from the database: " & myerror.Message)
            End Try
        Catch myerror As MySql.Data.MySqlClient.MySqlException
            MessageBox.Show("Error connecting to the database: " & myerror.Message)
        Finally
            If myConnection.State <> ConnectionState.Closed Then myConnection.Close()
        End Try

        myConnection.Close()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load



    End Sub
End Class
 
Auf welches Intervall hast du denn deinen Timer eingestellt?

Weiters würde sich für so einen Fall ein Thread wesentlich besser eignen. Dadurch bleibt der Rest unbeeinträchtigt.
 
Momentan auf 2000ms damit es einigermaßen normal aussieht . Aber stocken tut es dann ja dennoch.

Wenn ich es höher stelle wirkt es zwar dann Stockungsfrei aber die Online list wäre dann ja ziemlich ungenau und stocken würde es ja dennoch . =(
 
Hab nun die Syntax die ich vorher im Timer hatte in eine Sub getan und in einen neuen Thread geladen .

Allerdings kommt dann beim buddylist.clear() die Meldung : Ungültiger threadübergreifender Vorgang.

Da das leeren der Listbox aber wichtig ist (da sonst die Nicknames der Onlineanzeige ständig eingetragen werden würden und ein Nickname dann Xmal statt nur einmal angezeigt werden würde ) bin ich drauf angewiesen diese in der Syntax zu lassen . Hab allerdings noch nicht viel Ahnung vom Threading da ich mich erst kürzlich ins Threading eingelesen hatte und ich von daher noch keine Ahnung habe wie ichd ies verhindere , das der Compiler dort meckert.

Muss ich die Funktion evtl in mehrere Threads laden ? =/

Oder gibt es eine bessere lösung um das Problem zu lösen?

Für den Thread bin ich übrigens wie folgt vor gegangen :

Dim Thread As New Threading.Thread(AddressOf Refresh_buddylist)

ist global .

und in der buddy_load hab ich den Thread mit Thread.start gestartet.
 
Hallo,

auch wenn das jetzt ein bisschen Offtopic ist...
Wie sehen eigentlich eure Header aus?
Welchen Namespace muss genau verwenden, wenn ich die Funktionen aus dem MySQLConnector verwenden möchte?
Der MySQLConnector wurde erfolgreich installiert und hat sich in das Visual Studio 2008 SP1 integriert, muss etwas manuell an meinem Forms-Projekt machen?
 
Du musst den Verweis deinem Projekt hinzufügen .

Vorher funktionieren die ganzen MYSQLfunktionen nicht.

auf http://www.mysql.com wird dir auch nochmal genauer erklärt wie du eine Verbindung aufbaust und was der MYSQL Connector/.NET für Funktionen hat und wie sie angewendet werden.
 

Neue Beiträge

Zurück