[ cure126 @ 12.01.2015. 13:26 ] @
Potreban mi je savet jer sam početnik u C#, kako je najbolje realizovati čtanje iz fajla koji može konstantno da se menja?

U pitanju je običan txt fajl koji se sastoji iz linija stringova i promena može da bude samo dodavanjem novog reda (na dnu), međutim program mora non stop da proverava šta se nalazi u fajlu i na osnovu pročitanog da menja vrednosti u svojim kontrolama.
[ dusans @ 12.01.2015. 13:58 ] @
Ako ne želiš da se bakćeš sa FileSystemWatcher-om i da pamtiš dokle si stigao sa čitanjem fajla,
možda bi ovo bilo najprostije rešenje (u posebnom Thread-u):
Code:

  using (FileStream fs = new FileStream
       (fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    {
        using (StreamReader sr = new StreamReader(fs))
        {
            while (someCondition)
            {
                while (!sr.EndOfStream)
                    ProcessLinr(sr.ReadLine());
                while (sr.EndOfStream)
                    Thread.Sleep(100);
                ProcessLinr(sr.ReadLine());            
            }
        }
    }


Ili samo periodično pozivati ovaj deo (ne mora poseban Thread):
Code:

if (!sr.EndOfStream) ProcessLinr(sr.ReadLine());


[ cure126 @ 12.01.2015. 14:03 ] @
Moram videti nešto sa posebnim thredom, jer aplikacija ne sme da bude "zaleđena" ni u jednom trenutku a i naglašeno mi je da bude poseban tred. Razmotriću ovo...
[ mkaras @ 12.01.2015. 21:50 ] @
Citat:
cure126:
Potreban mi je savet jer sam početnik u C#, kako je najbolje realizovati čtanje iz fajla koji može konstantno da se menja?

U pitanju je običan txt fajl koji se sastoji iz linija stringova i promena može da bude samo dodavanjem novog reda (na dnu), međutim program mora non stop da proverava šta se nalazi u fajlu i na osnovu pročitanog da menja vrednosti u svojim kontrolama.

Ako možeš pojasni mehanizam upisa u taj fajl. Mislim na vremenski interval unosa novog podatka, kao i da li je struktura podatka uvek ista ili se menja.

Termin non stop zaboravi u digitalnom svetu. On postoji samo u linearnom svetu. U digitalnom postoji vrednost uzorkovana u nekom određenom intervalu. Pokušaj da fajl ne držiš stalno otvorenim. Otvori , očitaj, zatvori.

Rad sa posebnim nitima može a bude zanimljiv ali i veoma opasan ako ti je akcija uslovljena završetkom upisa ( šta kada se upiše delimičan podatak pa umesto pera stigneš da upišeš samo per a druga nit pokrene proces, očita podatak i pokrene akciju na osnovu tog delimično očitanog podatka.)
[ cure126 @ 12.01.2015. 22:04 ] @
Pa zahtev tačno glasi ovako

"Čitanje fajla mora da bude realizovano u posebnoj niti da bi se izbeglo blokiranje GUI dela aplikacije. Naglašavam činjenicu da fajl za unos nije nešto što je konačno i može biti izmenjen u svakom trenutku i treba ga pravilno pročitati i parsirati"

pod izmenom se misli da se fajl otvori iz druge aplikacije, doda red na dnu i zatvori. U tom slučaju (posle zatvaranja izmenjenog fajla) program treba da ažurira podatke. E sad ne znam da li to može bez nekog refreš dugmeta?
[ mkaras @ 12.01.2015. 22:48 ] @
Može ako aplikacija koja upisuje podatke na kraju upisa unese informaciju da je završen upis u tom ciklusu (redu). Onda je lako, očitaš posledni red do kraja unosa i dalje ga obrađuješ. Ako to nemaš onda je tvoje očitavanje i obrada očitanog u domenu sreće osim ako nisu strogo definisani intervali upisa i čitanja.
[ Boško @ 17.01.2015. 13:38 ] @
Pogledaj klasu FileSystemWatcher za praćenje izmena određenog fajla od strane druge aplikacije ("Listens to the file system change notifications and raises events when a directory, or file in a directory, changes.").

Čitanje fajla u posebnom threadu možeš uraditi koristeći klasu BackgroundWorker ("Executes an operation on a separate thread.")