Objektverweis erforderlich
-
Hallo C#-per,
normalerweise progge ich in C++.Net, benötige aber gerade eine Web-Anwendung im C# Format.
Ich möchte gerne meine Web-Site mit einigen Daten in Load und dann durch einen Timer aktuell halten.
Hierzu habe ich folgenden Code:
using System; using System.Configuration; using System.Data; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Timers; public partial class _Default : System.Web.UI.Page { public static System.Timers.Timer aTimer; public static System.DateTime aktDate; public void Page_Load(object sender, EventArgs e) { aTimer = new System.Timers.Timer(10000); aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); aktDate = DateTime.Now; LabelAktuelleZeitAnzeige.Text = Convert.ToString(aktDate); aTimer.Enabled=true; } private static void OnTimedEvent(object source, ElapsedEventArgs e) { aktDate = DateTime.Now; LabelAktuelleZeitAnzeige.Text = Convert.ToString(aktDate); } }
Mein Problem:
Das Label das in OnTimedEvent aktualisiert werden soll, ist hier nicht verfügbar. Der Compilorfehler besagt, dass ein Objectverweis nötig ist.Hat jemand ne Ahnung wie man das lösst?
Gruß und Danke,
DanielK.
-
Warum muss der Eventhandler unbedingt static sein? Ansonsten empfehle ich den System.Threading Timer.
-
Hallo Firefighter.
Nein, das war ein Code Schnipsel aus den Netz, und soweit hat das ja funktioniert.
Der Timer wird benötigt, um die Seite z.B. alle 2 Minuten zu aktualisieren, oder, wie hier zunächst die aktuelle Zeit auszugeben.
Ich habe static rausgenommen, jetzt gibt es auch keine Fehler mehr vom Compilor.
Aber, obwohl das TimerEvent durchlaufen wird, wird das Label auf der Web Site nicht erneuret.
Die Aktualisierung findet erst statt, wenn ich auf einen Button auf der Web Site anklicke, der zu diesem Zeitpunkt noch keine Funktion hat.
Woran kann das liegen, dass das Label nicht aktuell gehalten wird?
-
Zeig doch mal bitte deinen aktuellen Code.Klingt eher danach als wenn du was falsch machst.
-
Hallo Firefighter,
hier ist der aktuelle Code.
using System; using System.Configuration; using System.Data; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Timers; public partial class _Default : System.Web.UI.Page { public System.Timers.Timer aTimer; public System.DateTime aktDate; public void Page_Load(object sender, EventArgs e) { aTimer = new System.Timers.Timer(1000); aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); aktDate = DateTime.Now; LabelAktuelleZeitAnzeige.Text = Convert.ToString(aktDate); aTimer.Enabled=true; } private void OnTimedEvent(object source, ElapsedEventArgs e) { aktDate = DateTime.Now; LabelAktuelleZeitAnzeige.Text = Convert.ToString(aktDate); } protected void ButtonSiteUpdate_Click(object sender, EventArgs e) { } }
Wenn man den Durchlauf mit Debug macht, und den Code an diese Stelle überwacht:
private void OnTimedEvent(object source, ElapsedEventArgs e) { aktDate = DateTime.Now; LabelAktuelleZeitAnzeige.Text = Convert.ToString(aktDate); }
Kann man beobachten, dass das Label im Code aktualisiert wird, jedoch nicht auf der Web Site.
Die Uhrzeit auf der Web Site wird erst aktualisiert, wenn die Seite aktualisiert wird. Dieses Ereignis tritt auch dann ein, wenn man den Button anklickt. Das ist zumindest die Erklärung für den Button.Wie kann ich erreichen, dass die Uhr auf der Web Site weiterläuft, ohne das diese aktualisert werden muss (das Bild flimmert kurz unschön)?
Mit Sicherheit hast Du recht, ich mache bestimmt was falsch, aber was?
Mit C++ Code habe ich sowas ähnliches schon gemacht, daher weis ich das es geht, aber mit C# arbeite ich zum ersten mal. Leider.
Gruß,
DanielK.