Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - controllo orario in un thread
Forum - C# / VB.NET - controllo orario in un thread

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 12:16
Lunedì, 10/11/2014
Allora cerco di essere breve:
se creo un thread in cui faccio un ciclo while infinito in cui vado a controllare se l'orario del computer è uguale a quello scelto dall'utente sembra che non si verifichi mai questa condizione (che i due orari corrispondano).
Perchè mai però non lo so; voi lo sapete?

Ve lo chiedo perchè se lo stesso controllo lo faccio senza utilizzare il thread la condizione si verifica :noway:

Voi ne sapete qualcosa?
Io utilizzo il thread in quanto senno, l'interfaccia grafica (ho una windows form) non è utilizzabile dall'utente.
Ho provato anche con il background worker, ma niente :(

Il codice è questo:
Codice sorgente - presumibilmente C++

  1. private void btnUpdate_Click(object sender, EventArgs e)
  2.         {            
  3.             //faccio partire il thread
  4.             t = new Thread(new ThreadStart(ControllaScadenza));
  5.             t.Start();
  6.         }
  7.  
  8.         //metodo che esegue il thread
  9.         private void ControllaScadenza()
  10.         {
  11.             while (true)
  12.             {
  13.                 string giornoOggi = DateTime.Now.ToShortDateString();
  14.                 string oraAttuale = DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString() + ":" + DateTime.Now.Second.ToString();
  15.  
  16.                 //se è arrivato il momento applica le modifiche
  17.                 if ((this.dtpData.Text.ToString() == giornoOggi) &&
  18.                     (this.dtpOra.Text.ToString() == oraAttuale))
  19.                 {



Ripeto: con il thread non entra dentro all'if; senza thread invece si; why? e cosa devo fare per farlo entrare anche con il thread?

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 13:51
Lunedì, 10/11/2014
Non puoi accedere dal codice che gira in un thread agli oggetti creati nella GUI

PM Quote
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 14:04
Lunedì, 10/11/2014
Testo quotato

Postato originariamente da HeDo:

Non puoi accedere dal codice che gira in un thread agli oggetti creati nella GUI


Veramente che io sappia si poteva fare con
Codice sorgente - presumibilmente Plain Text

  1. Control.CheckForIllegalCrossThreadCalls = false;


PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 14:12
Lunedì, 10/11/2014
quello è un hack che funziona una volta si e 3 no, non è il modo giusto di fare le cose disabilitare i controlli :)

PM Quote
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 14:19
Lunedì, 10/11/2014
Ok chiedo scusa mi sto documentando e mi sono appena reso conto di aver detto (e anche fatto più volte in un mio programma :() una grossa idiozia, a quanto ho capito non è affatto una questione semplice e facendo come dicevo prima va a finire che il programma può crashare in modo random da un momento all'altro... ora ho capito che il modo corretto è far girare le righe di codice che lavorano sulla GUI nel thread della GUI stessa facendo una cosa del genere: http://stackoverflow.com/a/661662

Ultima modifica effettuata da GN il 10/11/2014 alle 14:20
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 14:28
Lunedì, 10/11/2014
Esatto, vale la regola che le modifiche alla GUI vanno "fatte fare" al thread che l'ha creata.
Comunque consiglio di usare la TPL al posto del brutale Thread, in particolare guardate le classi Task e Parallel

PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 15:14
Lunedì, 10/11/2014
douch :(
pensavo che quel problema lo desse solo in scrittura; pensavo che la lettura andasse a buon fine; invece no :(

Comunque mi potete spiegare voi; oppure dirmi il luogo esatto dove guardare per sistemare il mio problema?
Perchè ho letto sul link di stackoverflow che mi avete dato, però lo fanno in mille modi diversi (di cui alcuni neanche capisco bene cosa fanno :(   ad esempio quando usano le istruzioni in cui compare il simbolo  "=>" non so neanche cosa vuol dire; non l'ho mai usato ne visto usare :(  ;)

Mi potete dare delle dritte? Ad esempio HeDo, hai nominato TPL... cosa vuol dire e che cos è?

PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 9:19
Martedì, 11/11/2014
Ei? Ci siete ancora?
Ho chiesto qualche ragguaglio e voi mi scomparite?
Ditemi qualcosa per favore...

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 10:40
Martedì, 11/11/2014
Innanzitutto stai calmo, ringrazia se qualcuno risponde e non pressare. Siamo tutti volontari assolutamente non pagati per risolvere i problemi altrui, quindi fly down.

La TPL è la Task Parallel Library http://msdn.microsoft.com/it-it/library/dd460717(v=vs.110) ...
ovvero una libreria del framework .net che semplifica di molto la programmazione multithread.
Quel simbolo "strano" "=>" non è altro che una dichiarazione di un delegate inline, ovvero di un metodo anonimo http://msdn.microsoft.com/en-us/library/0yw3tz5k%28VS.80%2 ...

Manca un po di studio, ma sei sulla strada giusta.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo