[ djmrky @ 11.05.2005. 07:46 ] @
Dakle, zelim da napravim najobicniji timer na formi, ali nece nikako da mi radi kako treba. Funkcija je otprilike sledeca (zelim da izbrojim koliko protekne vremena u drugoj foreach petlji dole):
Code:

private void btnAnalyzeAllOBJs_Click(object sender, System.EventArgs e) {
            foreach (ListViewItem lvi in lvOBJs.Items){
                lvi.ForeColor = Color.Black;
                lvi.Selected = false;
            }
                         timer1.Enabled = true; //ovde valjda startujem timer
            foreach (ListViewItem lvi in lvOBJs.Items){
                Console.Out.WriteLine("Entered foreach");
                sCurrentlySelectedOBJ = lvi.Text;
                sCurrentlySelectedOBJName = lvi.SubItems[1].Text;
                lviCurrentlySelected = lvi;
                gbStatistics.Refresh();
                btnLoadData_Click(sender, e); //poziva se druga funkcija
                                          //koja, btw pristupa bazi (ako to ima veze)
                pbAllOBJsAnalysis.Value = lvi.Index + 1;
            }
                         timer1.Enabled = false; //ovde kao zaustavljam timer


namestio sam timer da radi tick svakih 500ms i u toj funkciji za timer menjam tamo neki label. Problem je u tome sto se ta funkcija uopste ne izvrsava svakih 500ms. U konkretnom slucaju, na nekih 10sec (od ulaska u petlju, program se zaustavlja i izbacuje neki moj dialog i u tom momentu (znaci kad se valjda suspendovao taj glavni thread) ona timer funkcija se izvrsava zaredom toliko puta koliko je vremena proslo i to na svakih 500ms.

Probao sam cak i da napravim poseban thread u kom pokrecem timer (pa cak i da stavim visi prioritet tom thread-u, ali ne radi nikako, uvek se timer event izvrsava tek kad se program zaustavi u toj petlji

GDE JA OVDE GRESIM?

Pozdrav
Dusan
[ Deep|Blue @ 12.05.2005. 18:08 ] @
pa greska je u tome sto nisi dodao zlicicu vegete . :)

uprosteno, pazi tvoja for each petlja mao vise zaokupi procesor, i u takvoj situaciji on nece da se zamara iscrtavanjem ekrana tebi potrebnim vrednostima. da bi to uradio trebas negde u petlji da dodas poziv
application.doevents i
eventualno
me.invalidate
ono sto ti je tu problem jeste sto ce ti to malo uspori izvrsavanje, ali usput i nije potreban timer.
bolja opcija je da podelis nekako tu petlju (ili dodas neki if uslov) gde bi osvezavane ekrana vrsio svako 20-30 perioda for petlje.
[ djmrky @ 13.05.2005. 07:54 ] @
da, osim sto sam ja probao i sa app.DoEvents i sa label.Refresh (ovaj Invalidate, doduse, nisam probao (znam da je to bilo u c++-u) i, kao sto rekoh, u posebnom thread-u (sa visim prioritetom) i opet ne radi

a btw, konkretno jedan prolaz petlje traje vise od 1sec a ja hocu da u toku tog jednog prolaza nekoliko puta osvezavam label

Pozdrav