2016-08-31 7 views
-1

Hallo ich habe ein Problem auf den Server Datum und Uhrzeit, ich war in der Lage, das Datum und die Uhrzeit, aber in Windows App-Formular, wenn das Formular für lange Stunden geöffnet ist, die Zeit wird eine Verzögerung von Sekunden haben (zB 10 bis 30 Sekunden) und auch Minuten, wenn die Anwendung den ganzen Tag geöffnet ist.Server Datum und Zeit in Windows App

verwenden ich den Code aus diesem Blog:

Get database server date and time

Wie ich das mehr als 10 Sekunden ohne Verzögerung zu tun.

Jede Hilfe würde sehr geschätzt werden.

Grüße

+0

Ich denke, es wird immer eine Verzögerung wegen verschiedener Faktoren geben, das beste Beispiel ist Netzwerkverbindungsgeschwindigkeit. Zu welchem ​​Zweck wirst du es brauchen? –

+0

@CrushSundae, ich stimme dem zu, aber wenn das Formular für lange Stunden geöffnet wird, wird es Minuten, es kann beeinflussen, weil ich die Serverzeit benutze, die im Formular angezeigt wird. Ich benutze das in sehr wichtigen Transaktionen und Validierungen. – Japongskie

+0

Nur eine Theorie, es könnte wegen der ununterbrochenen Anrufe, die Sie jede Sekunde an den Server übergeben, verlangsamt werden. –

Antwort

0

Das Problem ist, dass Sie Ihre Timer Feuer genau auf 1 Sekunde gehen davon aus. Es ist nicht so, die Timer sind nicht so genau und Sie sehen die Ergebnisse. Je beschäftigt Ihre Maschine ist, desto schlimmer wird das Problem.

Stattdessen müssen Sie die aktuelle Uhrzeit auf Ihrem Computer als Inkrement verwenden.

  1. Wenn Ihre Anwendung gestartet wird, verwenden Sie den Code aus dem Link, um die Serverzeit abzurufen.

  2. Ermitteln Sie den Zeitunterschied und speichern Sie dies als Elementvariable.

    mDiff = serverTime - Now 
    
  3. ein 1-Sekunden-Timer starten und die neue Anzeige Offsetzeit

    dim time = Now + mDiff 
    MyLabel.Text = time.ToString() 
    
+0

Ah meinst du, das Inkrement wird auf die PC-Zeit des Clients bekommen? – Japongskie

+0

ist es zuverlässig, die PC-Zeit des Kunden zu verwenden? –

+0

@CrushSundae nein! .. das ist das Problem, der Grund, warum ich Server Datum und Zeit verwenden, ist zu vermeiden, dass der Benutzer Validierungen umgehen, weil Clients PC-Zeit bearbeitet werden kann. Deshalb frage ich FloatingKiwi, wenn ich ihn richtig verstehe, was er von "aktuell" bedeutet Zeit Ihres Computers ". – Japongskie

0

habe es noch nicht getestet, nur eine Idee .:

habe ich zwei Timer steuert hier.

Timer1 mit einem Intervall von 1 sec.Timer2 und mit einem Intervall von 10 secs.

Dim tempDateTime As DateTime = Now 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 
     tempDateTime = tempDateTime.AddSeconds(1) 
     Label1.Text = tempDateTime 
    End Sub 

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick 
     Dim rs As ADODB.Recordset 

     rs = dbConn.Execute("SELECT GetDate() as CurrDateTime") 
     tempDateTime = Convert.ToDateTime(rs.Fields("CurrDateTime").Value) 

     Label1.Text = tempDateTime 
    End Sub 

I verwendet, nur für die Now einen temporären Wert zu haben (für atleast 1 Sek.).

Die Idee dabei ist:

Es wird nun weiter laufen, auch wenn Sie an den Server für einen anderen Anruf Wartezeit zu aktualisieren. Daher wird der Timer auf noch ausgeführt, während auf einen anderen Anruf auf dem Server warten. Nach dem neuen Aufruf wird tempDateTime jetzt auf die aktuelle Serverzeit gesetzt, dann wird Timer1 es erneut ausführen. Es ist wie Fälschen, dass es keine Verzögerung beim Abrufen der Serverzeit gibt.

+0

Eigentlich das gleiche, was mir in den Sinn kommt, während ich auf den einfachsten Weg und gute Antwort warte :), ich Ich versuche, es mit zwei Timern zu programmieren, einmal ist für die Aktualisierung der Bezeichnung alle 15 Sekunden, wenn ich erfolgreich war, werde ich Ihre als Antwort markieren :) – Japongskie

+0

Sana Gumana! ;) –

+0

Hahaha .. pinoy ka pala:/pinahirapan mo pa ko mag englisch ^^, .. ich erstelle neue Klasse für timer2 .. hoffe, das funktioniert ^^, du wirst sehen ob ich fertig bin. – Japongskie