grey1987 Geschrieben 19. November 2008 Teilen Geschrieben 19. November 2008 Servus, ich hab hier eine kleine DB-Anwendung, die mir einfach nur bestimmte Daten aus einer Datenbank in einem Windows-Form anzeigt. Jetzt würde ich gerne, dass sich das Prog jede 5min aktualisiert und somit die Daten aktuell bleiben. Da hab ich die Backgroundworder-Klasse gefunden, bzw. mir sagen lassen dass es sowas gibt und es hier einsetzbar ist. BackgroundWorker-Klasse (System.ComponentModel) ich bin leider noch ziemlicher Anfänger und hab leider nicht so die Ahnung wie ich das in meinen Quellcode einplanzen soll und vorallem wohin!? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xk4fu Geschrieben 19. November 2008 Teilen Geschrieben 19. November 2008 warum nimmst du nicht einfach einen timer her und stellst ihn auf 5 minuten Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 19. November 2008 Teilen Geschrieben 19. November 2008 Ja, wenn die Abfrage nicht ewig lange dauert würde ich auch den Timer nehmen. Wenn es damit läuft kannst du dir den BackWorker nochmal ansehen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xk4fu Geschrieben 20. November 2008 Teilen Geschrieben 20. November 2008 selbst wenn die abfrage länger als 5 minuten dauert, kann man den timer auch so einstellen, dass er erst 5 minuten nach der letzten abfrage wieder beginnt... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
grey1987 Geschrieben 20. November 2008 Autor Teilen Geschrieben 20. November 2008 ok, ich werde mir dann mal den timer anschauen. nur wie gesagt bin ich anfänger und werde auf anhieb nicht wirklich klar kommen. habt ihr da vielleicht einen link (außer msdn) wo ich mir das mal anschauen kann? bzw. könnt ihr mir das prinzip des timers erklären!? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LadyPreis Geschrieben 20. November 2008 Teilen Geschrieben 20. November 2008 der timer ist eine komponente, welche in einem festgelegten intervall einen programmblock ausführt. du suchst in deiner tooleiste, in der du buttons, textboxen etc findest nach der timer-komponente und ziehst sie normal aufs form (erscheint dann um unteren bildschirmrand). im eigenschaftenfenster der komponente gibt es die option "intervall". hier stellst du die zeit (in millisekunden) ein, nach welcher der timer loslaufen soll. wenn du als wert beispielsweise die 1000 einträgst, wird der timer alle 1000 millisekunden aufgerufen. mit einem doppelklick auf die timer-komponente kommst du in dessen programmblock. wenn du für deine anzeige im formular eine methode geschrieben hast, kannst du diese jetzt einfach im timer-block aufrufen. schon wird die methode in dem von dir angegebenen intervall immer wieder aufgerufen. Gruß Die Lady Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
grey1987 Geschrieben 20. November 2008 Autor Teilen Geschrieben 20. November 2008 Danke LadyPreis, hab jetzt so einen kleinen überblick wie das laufen soll. ich hab jetzt wie beschrieben alles durchgeführt, jedoch scheint es nicht zu funkionieren. ich hab eine Funktion loadQuery() welche ich aufrufe, wenn ich auf einen bestimmten Knopf drücke. und ab diesem Zeitpunkt soll die loadQuery() jede 5min aufgerufen werden. muss ich nicht noch irgendwo angeben, wann der timer gestartet wird, oder legt er los, sobald das prog läuft? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pointerman Geschrieben 20. November 2008 Teilen Geschrieben 20. November 2008 Moin! Von der Interval-Eigenschaft hat ja die Lady schon geschrieben. Unter den Events gibt es dann den Event "Tick". Dieser springt an, wenn der Interval verstrichen ist. Wie die Ladz sagte, einfach doppelklick auf den Timer, oder den Tick unter den Events auswaehlen. Um den Timer zu starten musst Du dann noch irgendwann mit der Methode Start() den Timer starten (z.B. MeinTimer.Start() ). Der Tick-Event wird nun so lange aufgerufen, bis Du die Methode Stop() des Timers aufrufst. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
grey1987 Geschrieben 20. November 2008 Autor Teilen Geschrieben 20. November 2008 also, ich hab doppelklick auf den Timer gemacht und meine funktion loadQuery() reingemacht. private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { loadQuery(); } private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { //hier soll dann die Methode Start() rein!? } was kommt dann in die Methode Start() rein? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pointerman Geschrieben 20. November 2008 Teilen Geschrieben 20. November 2008 private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { loadQuery(); } private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { timer1.Start(); } Ich habe Dir mal den Aufruf von Start eingefuegt. Nun sollte dann, in dem von dir gewaehlten Intervall, regelmaessig der Tick-Event aufgerufen werden. So ein Timer ist schon eine feine Sache... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LadyPreis Geschrieben 20. November 2008 Teilen Geschrieben 20. November 2008 hab jetzt leider keine ide zur Hand, aber schau doch nochmal im Eigenschaften-Fenster für den Timer, ob es dort keine option "Enabled" (zumindest heisst sie in VB so) gibt. wenn man diese auf "true" setzt, läuft der Timer automatisch beim Start des Programms los. Gruß Die Lady Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
grey1987 Geschrieben 20. November 2008 Autor Teilen Geschrieben 20. November 2008 hab jetzt leider keine ide zur Hand, aber schau doch nochmal im Eigenschaften-Fenster für den Timer, ob es dort keine option "Enabled" (zumindest heisst sie in VB so) gibt. wenn man diese auf "true" setzt, läuft der Timer automatisch beim Start des Programms los. Gruß Die Lady ja Funktioniert! besser wäre es aber wenn ich das mit einem Knopf machen könnte. ich weiß leider nicht was ich in eine Methode Start() reinpacken soll!? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LadyPreis Geschrieben 20. November 2008 Teilen Geschrieben 20. November 2008 (bearbeitet) dann stell "enabled" wieder auf false. im klick-ereigniss der buttons aktivierst du den timer einfach mit der anweisung Timer1.Enabled = true; dann wird der timer erst aktiviert, wenn du diesen button einmalig geklickt hast. wenn du den timer durch diesen Button auch wieder deaktivieren willst, könnte das wie folgt aussehen: if Timer1.Enabled Timer1.Enabled = false; else Timer1.Enabled = true; (so oder so ähnlich) Ist es das, was du willst oder hab ich dein Problem nicht verstanden :confused: Gruß Die Lady Bearbeitet 20. November 2008 von LadyPreis Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xk4fu Geschrieben 20. November 2008 Teilen Geschrieben 20. November 2008 füg einen button in die funktion doppel klick da drauf, dann wird automatisch die onclick funktion für den button generiert; und da drin schreibst du: timer1.start Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
grey1987 Geschrieben 20. November 2008 Autor Teilen Geschrieben 20. November 2008 abgesehen davon, dass ich vc++ benutze (mein Fehler) klappt das wunderbar. Ich danke euch! hier meine Lösung: private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { if (this->timer1->Enabled) { this->timer1->Enabled = false; button1->Text = L"refresh on"; } else { this->timer1->Enabled = true; button1->Text = L"refresh off"; } } Gruss Grey Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 20. November 2008 Teilen Geschrieben 20. November 2008 selbst wenn die abfrage länger als 5 minuten dauert, kann man den timer auch so einstellen, dass er erst 5 minuten nach der letzten abfrage wieder beginnt... Klar, aber dann würde deine Anwendung nicht reagieren während der Abfrage, das würde mit dem Backgroundworker der ja Multithreaded arbeitet nicht der Fall. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xk4fu Geschrieben 24. November 2008 Teilen Geschrieben 24. November 2008 die anwendung bleibt ja nicht im timer stehen, bzw man macht ja nicht im timer einen counter, der fünf minuten wartet: ich stells mir eher so vor: du holst dir die aktuelle uhrzeit und prüfst bei jedem timer zyklus einfach nach, ob seitdem fünf minuten vorbei sind... die anwendung selbst bliebt daher nicht stehen nachteil: ändert man im windows die uhrzeit, könnte man ein problem haben. evtl macht man aber einen zweiten timer, der fünf minuten läuft und fragt den dann ab, dann hätte man keine probleme... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 24. November 2008 Teilen Geschrieben 24. November 2008 Darum geht es nicht, die GUI der Anwendung reagiert während der Abfrage nicht wenn die Datenbankabfrage im gleichen Thread läuft. Wenn die Abfrage lange dauert kann der User dein Eindruck bekommen die Abfrage wäre abgestürzt. Beim Backgroundworker wird automatisch der Threadpool verwendet, da passiert das nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xk4fu Geschrieben 24. November 2008 Teilen Geschrieben 24. November 2008 ja das ist klar, ich hab aber jetzt auch an einen mdicontainer gedacht über dessen menü weitere dialoge aufgerufen werden; und wenn der timer in diesem läuft, interessiert das ja die anderen dialoge nicht, oder Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 24. November 2008 Teilen Geschrieben 24. November 2008 Doch, die laufen alle im gleichen GUI Thread. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xk4fu Geschrieben 24. November 2008 Teilen Geschrieben 24. November 2008 hast mich überzeugt :floet: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.