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
codice:// 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)); } }

Rispondi quotando
