Per lavoro mi hanno chiesto di realizzare un sistema in grado di gestire diversi file contemporaneamente. Essendo che non ho alcuna intenzione di abbandonarmi a strutture dati nonchè errori ingegneristici di programmazione stile vb6 e potendo contare sulla potenza che mi è data dal framework, ecco che ho deciso di affidarmi ai thread. Ogni thread si occuperà separatamente del proprio file, per poi scatenare eventi nel momento giusto per fare in modo che l’interfaccia grafica segnali correttamente i cambiamenti. Ora sorgono i primi problemi: come avviare una sola funzione in un thread? Ecco come possiamo risolvere.
Per prima cosa verifichiamo di aver importato le librerie per il Threading, quindi
using System.Threading;
poi posizioniamoci dove vogliamo fare partire una nuova funzione asincrona, supponendo, come nel mio caso che questa funzione si chiami CheckFile.
ThreadStart entry = new ThreadStart(CheckFile); Thread thread = new Thread(entry); thread.Start();
ed ecco che la funzione asincrona è partita ![]()
Mi chiamo Denis Billi, ho 25 anni e sono della provincia di Ravenna. Mi sono laureato nell'estate del 2008 presso la facoltà di Ingegneria Informatica dell'università di Bologna e attualmente sto seguendo i corsi per la Laurea Specialistica in Ingegneria Informatica sempre all'università di Bologna.
Ciao,
vorrei realizzare in c# un form con un thread che visualizzi in una textbox in realtime il contenuto di un file…
Come devo fare?
Ciao michele e benvenuto nel blog! Posso rispondere alla tua domanda invitandoti a leggere questi articoli che ho già scritto:
Leggere file in C#
Modificare una text-box da un altro thread
Una volta letto fammi sapere cosa non ti è chiaro.
A presto!
Si le ho lette…
Per iniziare ho creato la funzione che deve leggere il file:
private delegate void ckFile();
public void CheckFile()
{
if (lstbox.InvokeRequired) //preso dal blog
{
lstbox.Invoke(new ckFile(CheckFile));
return;
}
//cancello la listbox
for (int i = lstbox.Items.Count – 1; i > 0; i–)
{
lstbox.Items.Remove(lstbox.Text);
}
//leggo il file
StreamReader sr = File.OpenText(“dati.txt”);
string riga = “aa”;
do
{
lstbox.Items.Add(riga);
riga = sr.ReadLine();
}
while (riga != null);
sr.Close();
}
Pero’ come faccio a creare un thread che duri tutto il ciclo di vita del form e mi faccia vedere il contenuto in tempo reale del file nella listbox??
Beh non c’è bisogno che il thread duri per tutta la vita della form… Io fossi in te userei il controllo FileSystemWatcher che ti permette di sapere quando un determinato file viene modificato (viene scatenato un evento). In quel caso (e solo in quello, sia chiaro, quindi nessuno spreco di risorse per pause attive), tu fai partire la tua routine che aggiorna il contenuto della textbox in base al contenuto del file, volendo all’interno di un thread parallelo che nasce e muore normalmente al termine della modifica.
Ciao!