Come posso generare un evento in un momento specifico? Ad esempio, supponiamo di voler generare un avviso alle 8:00 AM che mi informi delle sue 8:00 (o di un evento che mi informa dell'ora corrente in un dato momento).Come posso generare un avviso in un momento specifico in C#?
risposta
utilizzare la classe System.Threading.Timer:
var dt = ... // next 8:00 AM from now
var timer = new Timer(callback, null, dt - DateTime.Now, TimeSpan.FromHours(24));
Il callback
delegato sarà chiamato la prossima volta è 08:00 e ogni 24 ore successive.
Vedere this SO question come calcolare l'occorrenza successiva alle 8:00.
private void Run_Timer()
{
DateTime tday = new DateTime();
tday = DateTime.Today;
TimeSpan Start_Time = new TimeSpan(8,15,0);
DateTime Starter = tday + Start_Time;
Start_Time = new TimeSpan(20, 15, 0);
DateTime Ender = tday + Start_Time;
for (int i = 0; i <= 23; i++)
{
Start_Time = new TimeSpan(i, 15, 0);
tday += Start_Time;
if (((tday - DateTime.Now).TotalMilliseconds > 0) && (tday >= Starter) && (tday <= Ender))
{
Time_To_Look = tday;
timer1.Interval = Convert.ToInt32((tday - DateTime.Now).TotalMilliseconds);
timer1.Start();
MessageBox.Show(Time_To_Look.ToString());
break;
}
}
}
Possiamo usare questa funzione per ottenere il timer in esecuzione per i tempi o modificarlo per l'esecuzione su un orario specifico: D
È ovvio che la soluzione di @dtb è migliore. – albertein
Ma è anche ovvio che non hai avuto l'idea che una persona che pone la domanda riesca a capire meglio la sua domanda. Sono d'accordo che mi ha dato un formato per farlo in una specifica ora del giorno, ma ho dovuto farlo funzionare su le condizioni non staticamente in una certa ora del giorno una volta la maggior parte del lavoro fatto nel mio codice è per l'esecuzione di quel ciclo e impostare il tempo per il prossimo arresto del timer. Se si può vedere che non il numero di linee in quel – Mobin
Does l'avviso devono essere generati dal programma? Un approccio alternativo consiste nell'utilizzare un Scheduled Task (in Windows) per generare l'avviso. Potrebbe essere necessario scrivere un piccolo programma che raccoglie tutte le informazioni da file di dati della vostra applicazione principale ecc
ci sono un paio di vantaggi principali di utilizzare questo approccio:
- Non è necessario scrivere alcun codice per supportare la funzionalità. Fai uso di qualcosa integrato nel sistema operativo. L'esempio è per Windows, ma altri sistemi operativi hanno la stessa funzionalità. È possibile concentrare lo sviluppo e supportare lo sforzo sul proprio codice.
- L'applicazione principale non deve essere in esecuzione per l'attività da attivare.
Elaborando la risposta di dtb questo è il modo in cui l'ho implementato.
private void Form1_Load(object sender, EventArgs e)
{
System.Threading.TimerCallback callback = new TimerCallback(ProcessTimerEvent);
//first occurrence at
var dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 10, 0, 0);
if (DateTime.Now < dt)
{
var timer = new System.Threading.Timer(callback, null,
//other occurrences every 24 hours
dt - DateTime.Now, TimeSpan.FromHours(24));
}
}
private void ProcessTimerEvent(object obj)
{
MessageBox.Show("Hi Its Time");
}
- 1. Come chiamare un metodo ogni giorno, in un momento specifico, in C#?
- 2. Come generare un avviso R in modo sicuro in Rcpp
- 3. Come modificare UIDatePicker in un momento specifico (nel codice)
- 4. Come dare notifiche su Android in un momento specifico?
- 5. Aggiorna pagina in un momento specifico in ASP.NET
- 6. Come generare un avviso deprecato per un metodo in un'interfaccia COM (C++)
- 7. Richiama la modalità profilo telefono Android in un momento specifico
- 8. Come posso generare un numero pseudocasuale crittograficamente sicuro in C#?
- 9. Come capovolgere un bit specifico in un byte in C?
- 10. Come posso generare un GUID in Vim?
- 11. Imposta la notifica in un momento specifico Android
- 12. Come posso popolare un ComboBox al momento dell'installazione in WiX?
- 13. Come trattare un avviso come un errore in un Makefile?
- 14. Ripristina tutti i commit di un autore specifico da un momento specifico
- 15. Come posso generare un programma di torneo in Ruby?
- 16. Genera una miniatura/istantanea di un file video selezionato da un file in un momento specifico
- 17. C# Generics - Come posso restituire un tipo specifico?
- 18. Come generare numeri casuali diversi in un ciclo in C++?
- 19. Come posso generare e inviare un file .zip a un utente in C# ASP.NET?
- 20. come eseguire il checkout di un singolo file specifico in un dato momento in un altro file
- 21. Come posso generare un elenco tramite il preprocessore C (cpp)?
- 22. come avviare un processo in un determinato momento in java?
- 23. Genera un numero casuale in C all'interno di un intervallo e un passaggio specifico
- 24. Come posso recuperare un prodotto specifico in Shopify Liquid?
- 25. Come posso eseguire i test Nightwatch in un ordine specifico?
- 26. Come posso avviare animazioni CSS3 in un punto specifico?
- 27. Come posso cambiare un colore di carattere specifico in git?
- 28. C'è un momento in cui ignorare IDisposable.Dispose?
- 29. Il modo migliore per pubblicare in un momento specifico in Sitecore
- 30. Come posso generare un ID univoco in Python?
So che seguendo il link ne parla, ma potrebbe voler chiarire che questo è System.Threading.Timer e non System.Windows.Forms.Timer – McAden
funzionerebbe se fornisco l'ultimo 8.00 da oggi? Quindi viene dato un numero negativo? – Jaanus
@Jaanus No, l'ho appena provato e lancia un'eccezione. Se dt