[# 2.0] Thread e aggiornamento datagridview

mercoledì 19 marzo 2008 - 08.33

Pokino Profilo | Junior Member

Ciao a tutti,

ho una applicazione che mi serve per verificare lo stato dei pc della lan e mi permette di accenderli o spegnerli da remoto. Per la fase di verifica utilizzo un thread per evitare di bloccare l'applicazione per il tempo necessario a fare il poll dei sistemi o ad attendere il tempo di startup o shutdown.

Non capisco come mai se eseguo dei test di accensione / spegnimento su una macchina che chiamo A, il thread di verifica mi aggiorna la datagridview correttamente modificando lo status del pc in esame, mentre se accendo / spengo una macchina B, la verifica dello stato non riesce ad aggiornare la datagridview, anche se con un break vedo che le variabili fino a quel punto sono ok.. cosa strana è che se quando il thread si ferma sul breakpoint visual studio 2005 ci mette qualche secondo a farmi vedere le variabili e poi se premo F10 non avanza di un solo passo ma in pratica prosegue come se premessi F5.



l'aggiornamento della datagridview lo faccio (spero) nel thread principale tramite una callback via delegate..

grazie

// metodo di callback da VerificaStatoSingoloClient public void RitornaDaVSSC(int id, string status_old, string status_new, int durata) { int auxId = 0; int i = 0; // cerca la nuova posizione del client nel datagridview e la salva in [i] int tot = dgvElencoClient.RowCount; for (i = 0; i < tot; i++) { auxId = (int)dgvElencoClient.Rows[i].Cells["ID"].Value; if (auxId == id) break; } _ultima_attesa = durata; // aggiorna stato in tabella if (status_new != status_old) { if (status_old == "On") _client_on -= 1; if (status_old == "Off") _client_off -= 1; if (status_old == "-") _client_unknown -= 1; if (status_new == "On") { _client_on += 1; dgvElencoClient.Rows[i].Cells["St"].Style.BackColor = Color.YellowGreen; dgvElencoClient.Rows[i].Cells["St"].Value = "On"; } else if (status_new == "Off") { _client_off += 1; dgvElencoClient.Rows[i].Cells["St"].Style.BackColor = Color.OrangeRed; dgvElencoClient.Rows[i].Cells["St"].Value = "Off"; } else { _client_unknown += 1; dgvElencoClient.Rows[i].Cells["St"].Style.BackColor = Color.White; dgvElencoClient.Rows[i].Cells["St"].Value = "-"; } // chiamata thread-safe per aggiornamento totali client this.BeginInvoke(new EventHandler(AggiornaTotali)); } }
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5