» »

C# osveževanje app

C# osveževanje app

zacetnik11 ::

Pozdravljeni
Imam težavo pri izdelavi C# aplikacije in sicer, ne vem kako naj naredim da se mi textBlok osvežuje vsakih 10 sekund.
V textBloku imamm prikazano vrednost iz baze, zaradi tega želim da se mi osvežuje vsakih 10sek.

Sem že poskusil z Thread.Sleep, vendar ne dela vredu.

Mogoče kakšen predlog, če je kdo že kaj podobnega delal.

Hvala za pomoč.

Kekec ::

Narediš nov thread, ki na deset sekund prebere vrednost iz baze in jo prikazeš.

zacetnik11 ::

Ja ni čist tako, ker mi javi napako, da formo že uporablja en proces in ni možno poseganje med procesi.
Vse to sem že poskusil.

Kekec ::

V bistvu je čisto tako samo prav je potrebno narediti. Malo si poglej kako delujejo thredi in kako poteka komunikacija med njimi.

zacetnik11 ::

Sem pogledal ogromno tutorialov, vendar nisem našel kar bi mi pomagalo.
Ali imaš ti mogoče kakšen primer?

Kekec ::

Tole sem na hitro našel med vožnjo :) http://dougzuck.com/c-ui-threading-exam...
če ne druga te bo vsaj usmerilo v pravo smer.

joze67 ::

Imaš Timer kontrolo, ki je natančno to, kar potrebuješ: na določen interval kliče podprogram, ki mimogrede lahko popravlja vsebino (in več) drugih gradnikov.

Če pa poženeš novo nit, moraš uporabljati Invoke() za sinhronizacijo GUI niti in te druge niti.

win64 ::

Namesto klasičnih niti lahko uporabiš tudi BackgroundWorker. Kar luštna zadeva za preprosta opravila na windows formah.

kod ::

Nekako tako bi moralo delat:

timer = new System.Timers.Timer(1000);
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);

void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timer.Stop();
update();
timer.Start();
}

void update()
{
if (this.InvokeRequired)
{
this.BeginInvoke((MethodInvoker)delegate
{
update();
});
}
else
{
textBlok.text="blabla";
}
}

nightrage ::

Če uporabljaš Thread-e potem si poglej delegate, drugač pa pa lahko vse skupaj implementiraš z backgroundworker-jem, kjer v metodi processchanged updataš gui.

joze67 ::

System.Windows.Forms.Timer sproži event v GUI niti in ni potrebno uporabljati Invoke()- Če govorimo o WinForm programu.

zacetnik11 ::

Hvala za odgovore in pomoč sem rešil z invoke, zelo pomagal link od @kekca.

mihies ::

Obstaja še moderen pristop s Taski, tako, na pamet:
async Task Osvežuj() {
while(true) {
  await Task.Delay(TimeSpan.FromSeconds(10));
  // naredi kar moraš, tole se bo izvedlo v UI niti, če se je while začel v UI niti.
}
}


Tole metodo poženeš, ko hočeš začeti osveževanje. Deluje pa samo s .net 4.5 in novejšimi.
http://blog.rthand.com/
SLODUG - uporabniška skupina
https://www.facebook.com/groups/slodug/


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[VB] datagridview

Oddelek: Programiranje
351950 (1333) korenje3
»

kako narediti program ki bere drugi program

Oddelek: Programiranje
465778 (4091) imagodei
»

Vprasanje glede koncepta programa [c#]

Oddelek: Programiranje
112068 (1810) _Dormage_
»

[C#]naključno generiranje oken

Oddelek: Programiranje
5906 (762) whatever
»

[VB] Komunikacija s serijskimi napravami

Oddelek: Programiranje
412314 (1588) mNeRo

Več podobnih tem