faretesto > microsoft.* > microsoft.dotnet.csharp

Fabrizio Di Santo (28.06.2005, 15:58)
Alla fine non posso pių scappare devo necessariamente imparare
questi maledetti arnesi.. : )

Apparte gli scherzi, ho guardato in alcune guide, nwsg e altro, come
fare per realizzare un thread. La cosa che sostanzialmente non capisco
e cosa ci devo mettere dentro.

Provo a spiegarmi meglio, facendo l'esempio dell'applicazione che sto
facendo in questo momento.

Ho un modem che chiama una periferica GSM, fin qui tutto bene solo
che quando vado a leggere sulla porta seriale e ovviamente attendo
la risposta, il programma si "sospende" fin quando non ho fatto la lettura
sulla porta. Penso che questa cosa si possa evitare facendo un thread, ma
non so da dove iniziare.

Vi riporto il pezzetto di codice, nella speranza che qualcuno mi aiuti...
Per esempio fino a quando il codice non č stato completamente eseguito
nella textBox non viene scritto niente...

private void button1_Click(object sender, System.EventArgs e)

{

try

{

this.textBox1.Text = "Impostazioni del modem in corso\r\n";

// Prova a settare i parametri alla porta

seriale.PortName = "COM6";

seriale.BaudRate = 9600;

seriale.DataBits = 8;

seriale.StopBits = StopBits.One;

seriale.Parity = Parity.None;

this.textBox1.Text += "Comunicazione con il modem in corso\r\n";

// Apre la porta

seriale.Open();

Thread.Sleep(10000);

this.textBox1.Text += "Effettuazione della chiamata alla
periferica\r\n123456789\r\n";

// Effettua la chiamata

if (seriale.IsOpen) seriale.Write("ATDT123456789\r");

else return;

/// Legge sulla porta eventuali messaggi

int prova = seriale.Read();

string testo;

do

{

seriale.Read();

testo = seriale.ReadAvailable();

}

while(!testo.StartsWith("\nCONNECT"));

}

catch

{

/// Chiude la porta

seriale.Close();

}

}

Grazie a tutti Fabrizio
Roberto Sartori (28.06.2005, 19:42)
Ciao Fabrizio,

dai una occhiata al 3d "multithreading -- primo scontro" di qualche
giorno fa ...
il concetto č di isolare le parti di codice critiche (es. lettura da
periferiche, computazioni complesse, ....) in routine separate e farle
eseguire in un thread separato.
Il come farlo č abbastanza banale (all'inizio) trovi molta
documentazione su MSDN.

Ciao
Roberto

"Fabrizio Di Santo" <fabrizio.disanto> ha scritto nel messaggio
news:3012
[..]
Fabrizio Di Santo (28.06.2005, 22:35)
Ciao Roberto, intanto ti ringrazio per la tua risposta.

Effettivamente ho letto il 3d ed ho seguito anche il link che portava ad un
vecchio esempio di Corrado in cui spiegava l'utilizzo dei delegate e delle
chimate Invoke...

Ho provato, cosė tanto per smanettare a fare questa cosa, giusto per
provare. Ho creato un thread che ciclando scrive 1000 volte la parola
"prova" in una textBox ed in un secondo thread ho provato a far aprire
la mappa di mapPoint.

Purtroppo quello che ottengo e che la mappa si apre subito, mentre il
thread che cicla blocca l'applicazione. Se vuoi posso postare quelle 4
righe di codice che ho provato a creare... da qualche parte sbaglio, ma
non capisco dove.

Grazie Fabrizio

"Roberto Sartori" <santone82> ha scritto nel messaggio
news:3036
[..]
Roberto Sartori (29.06.2005, 15:52)
Ciao Fabrizio,

prova a postare le parti di codice significative ...

comunque se un thread funziona correttamente e l'altro no,
il problema sta nello scheduling dei thread da parte del SO (molto poco
probabile)
oppure in una errata gestione della sincronizzazione.

Aspetto ...

Ciao
Roberto

"Fabrizio Di Santo" <assistenza> wrote in message
news:2644
[..]
Discussioni simili