Timer Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Fornece um mecanismo para executar um método numa thread pool de threads em intervalos especificados. Esta classe não pode ser herdada.
public ref class Timer sealed : IDisposable
public ref class Timer sealed : MarshalByRefObject, System::Threading::ITimer
public ref class Timer sealed : MarshalByRefObject, IAsyncDisposable, IDisposable
public ref class Timer sealed : MarshalByRefObject, IDisposable
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class Timer : IDisposable
public sealed class Timer : MarshalByRefObject, System.Threading.ITimer
public sealed class Timer : MarshalByRefObject, IAsyncDisposable, IDisposable
public sealed class Timer : MarshalByRefObject, IDisposable
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class Timer : MarshalByRefObject, IDisposable
[<System.Runtime.InteropServices.ComVisible(true)>]
type Timer = class
interface IDisposable
type Timer = class
inherit MarshalByRefObject
interface IAsyncDisposable
interface IDisposable
interface ITimer
type Timer = class
inherit MarshalByRefObject
interface IAsyncDisposable
interface IDisposable
type Timer = class
inherit MarshalByRefObject
interface IDisposable
[<System.Runtime.InteropServices.ComVisible(true)>]
type Timer = class
inherit MarshalByRefObject
interface IDisposable
Public NotInheritable Class Timer
Implements IDisposable
Public NotInheritable Class Timer
Inherits MarshalByRefObject
Implements ITimer
Public NotInheritable Class Timer
Inherits MarshalByRefObject
Implements IAsyncDisposable, IDisposable
Public NotInheritable Class Timer
Inherits MarshalByRefObject
Implements IDisposable
- Herança
-
Timer
- Herança
- Atributos
- Implementações
Exemplos
O exemplo seguinte define uma StatusChecker classe que inclui um CheckStatus método cuja assinatura é igual à do TimerCallback delegado. O state argumento do CheckStatus método é um AutoResetEvent objeto usado para sincronizar o thread de aplicação e o thread pool de threads que executa o delegado de callback. A StatusChecker classe inclui também duas variáveis de estado:
invokeCount
Indica o número de vezes que o método de callback foi invocado.
maxCount
Determina o número máximo de vezes que o método de callback deve ser invocado.
O thread de aplicação cria o temporizador, que espera um segundo e depois executa o CheckStatus método de callback a cada 250 milissegundos. O thread da aplicação bloqueia então até que o AutoResetEvent objeto seja sinalizado. Quando o CheckStatus método de callback é maxCount executado vezes, chama o AutoResetEvent.Set método para definir o estado do AutoResetEvent objeto como sinalizado. Na primeira vez que isto acontece, o thread da aplicação chama o Change(Int32, Int32) método para que o método de callback seja agora executado a cada meio segundo. Bloqueia novamente até que o AutoResetEvent objeto seja sinalizado. Quando isto acontece, o temporizador é destruído ao chamar o seu Dispose método, e a aplicação termina.
using System;
using System.Threading;
class TimerExample
{
static void Main()
{
// Create an AutoResetEvent to signal the timeout threshold in the
// timer callback has been reached.
var autoEvent = new AutoResetEvent(false);
var statusChecker = new StatusChecker(10);
// Create a timer that invokes CheckStatus after one second,
// and every 1/4 second thereafter.
Console.WriteLine("{0:h:mm:ss.fff} Creating timer.\n",
DateTime.Now);
var stateTimer = new Timer(statusChecker.CheckStatus,
autoEvent, 1000, 250);
// When autoEvent signals, change the period to every half second.
autoEvent.WaitOne();
stateTimer.Change(0, 500);
Console.WriteLine("\nChanging period to .5 seconds.\n");
// When autoEvent signals the second time, dispose of the timer.
autoEvent.WaitOne();
stateTimer.Dispose();
Console.WriteLine("\nDestroying timer.");
}
}
class StatusChecker
{
private int invokeCount;
private int maxCount;
public StatusChecker(int count)
{
invokeCount = 0;
maxCount = count;
}
// This method is called by the timer delegate.
public void CheckStatus(Object stateInfo)
{
AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
Console.WriteLine("{0} Checking status {1,2}.",
DateTime.Now.ToString("h:mm:ss.fff"),
(++invokeCount).ToString());
if(invokeCount == maxCount)
{
// Reset the counter and signal the waiting thread.
invokeCount = 0;
autoEvent.Set();
}
}
}
// The example displays output like the following:
// 11:59:54.202 Creating timer.
//
// 11:59:55.217 Checking status 1.
// 11:59:55.466 Checking status 2.
// 11:59:55.716 Checking status 3.
// 11:59:55.968 Checking status 4.
// 11:59:56.218 Checking status 5.
// 11:59:56.470 Checking status 6.
// 11:59:56.722 Checking status 7.
// 11:59:56.972 Checking status 8.
// 11:59:57.223 Checking status 9.
// 11:59:57.473 Checking status 10.
//
// Changing period to .5 seconds.
//
// 11:59:57.474 Checking status 1.
// 11:59:57.976 Checking status 2.
// 11:59:58.476 Checking status 3.
// 11:59:58.977 Checking status 4.
// 11:59:59.477 Checking status 5.
// 11:59:59.977 Checking status 6.
// 12:00:00.478 Checking status 7.
// 12:00:00.980 Checking status 8.
// 12:00:01.481 Checking status 9.
// 12:00:01.981 Checking status 10.
//
// Destroying timer.
Imports System.Threading
Public Module Example
Public Sub Main()
' Use an AutoResetEvent to signal the timeout threshold in the
' timer callback has been reached.
Dim autoEvent As New AutoResetEvent(False)
Dim statusChecker As New StatusChecker(10)
' Create a timer that invokes CheckStatus after one second,
' and every 1/4 second thereafter.
Console.WriteLine("{0:h:mm:ss.fff} Creating timer." & vbCrLf,
DateTime.Now)
Dim stateTimer As New Timer(AddressOf statusChecker.CheckStatus,
autoEvent, 1000, 250)
' When autoEvent signals, change the period to every half second.
autoEvent.WaitOne()
stateTimer.Change(0, 500)
Console.WriteLine(vbCrLf & "Changing period to .5 seconds." & vbCrLf)
' When autoEvent signals the second time, dispose of the timer.
autoEvent.WaitOne()
stateTimer.Dispose()
Console.WriteLine(vbCrLf & "Destroying timer.")
End Sub
End Module
Public Class StatusChecker
Dim invokeCount, maxCount As Integer
Sub New(count As Integer)
invokeCount = 0
maxCount = count
End Sub
' The timer callback method.
Sub CheckStatus(stateInfo As Object)
Dim autoEvent As AutoResetEvent = DirectCast(stateInfo, AutoResetEvent)
invokeCount += 1
Console.WriteLine("{0:h:mm:ss.fff} Checking status {1,2}.",
DateTime.Now, invokeCount)
If invokeCount = maxCount Then
' Reset the counter and signal the waiting thread.
invokeCount = 0
autoEvent.Set()
End If
End Sub
End Class
' The example displays output like the following:
' 11:59:54.202 Creating timer.
'
' 11:59:55.217 Checking status 1.
' 11:59:55.466 Checking status 2.
' 11:59:55.716 Checking status 3.
' 11:59:55.968 Checking status 4.
' 11:59:56.218 Checking status 5.
' 11:59:56.470 Checking status 6.
' 11:59:56.722 Checking status 7.
' 11:59:56.972 Checking status 8.
' 11:59:57.223 Checking status 9.
' 11:59:57.473 Checking status 10.
'
' Changing period to .5 seconds.
'
' 11:59:57.474 Checking status 1.
' 11:59:57.976 Checking status 2.
' 11:59:58.476 Checking status 3.
' 11:59:58.977 Checking status 4.
' 11:59:59.477 Checking status 5.
' 11:59:59.977 Checking status 6.
' 12:00:00.478 Checking status 7.
' 12:00:00.980 Checking status 8.
' 12:00:01.481 Checking status 9.
' 12:00:01.981 Checking status 10.
'
' Destroying timer.
Observações
Usa um TimerCallback delegado para especificar o método que queres que ele Timer execute. A assinatura do TimerCallback delegado é:
void TimerCallback(Object state)
Sub TimerCallback(state As Object)
O delegado do temporizador é especificado quando o temporizador é construído e não pode ser alterado. O método não se executa no thread que criou o temporizador; Executa-se numa ThreadPool thread fornecida pelo sistema.
Tip
.NET inclui várias classes temporizadoras, cada uma das quais oferece funcionalidades diferentes:
- System.Timers.Timer, que dispara um evento e executa o código em um ou mais sumidouros de eventos a intervalos regulares. A classe destina-se a ser usada como componente baseado em servidor ou de serviço num ambiente multithread; Não tem interface de utilizador e não é visível em tempo de execução.
- System.Threading.Timer, que executa um único método de callback numa thread pool de threads a intervalos regulares. O método de callback é definido quando o temporizador é instanciado e não pode ser alterado. Tal como a System.Timers.Timer classe, esta classe destina-se a ser usada como componente baseado em servidor ou serviço num ambiente multithread; não tem interface de utilizador e não é visível em tempo de execução.
- System.Windows.Forms.Timer, um componente Windows Forms que dispara um evento e executa o código em um ou mais sumidoiros de eventos a intervalos regulares. O componente não tem interface de utilizador e foi concebido para ser utilizado num ambiente de thread única; executa-se na thread da interface.
- System.Web.UI.Timer (apenas .NET Framework), um componente ASP.NET que realiza postbacks de páginas web assíncronas ou síncronas a intervalos regulares.
-
System.Windows.Threading.DispatcherTimer, um temporizador integrado na fila
Dispatcher. Este temporizador é processado com uma prioridade especificada num intervalo de tempo especificado.
Quando crias um temporizador, podes especificar um tempo de espera antes da primeira execução do método (tempo de vencimento) e um tempo de espera entre execuções subsequentes (ponto). A Timer classe tem a mesma resolução do relógio do sistema. Isto significa que, se o período for inferior à resolução do relógio do sistema, o delegado TimerCallback executará em intervalos definidos pela resolução do relógio do sistema, que é aproximadamente 15 milissegundos nos sistemas Windows 7 e Windows 8. Pode alterar o tempo e o período de devida, ou desativar o temporizador, usando o Change método.
Note
Desde que esteja a usar um Timer, deve manter uma referência a ele. Tal como em qualquer objeto gerido, a Timer está sujeito a recolha de lixo quando não há referências a ele. O facto de a Timer ainda estar ativa não impede que seja recolhida.
Note
O relógio do sistema utilizado é o mesmo que o GetTickCount, que não é afetado por alterações feitas com timeBeginPeriod e timeEndPeriod.
Quando um temporizador deixar de ser necessário, use o Dispose método para libertar os recursos armazenados pelo temporizador. Note-se que os callbacks podem ocorrer depois de a Dispose() sobrecarga do método ter sido chamada, porque o temporizador coloca callbacks na fila para execução pelos threads do pool de threads. Podes usar o Dispose(WaitHandle) método overload para esperar até que todas as chamadas de retorno estejam concluídas.
O método de callback executado pelo temporizador deve ser reentrante, porque é chamado em ThreadPool threads. O callback pode ser executado simultaneamente em dois threads do pool de threads se o intervalo do temporizador for inferior ao tempo necessário para executar o callback, ou se todos os threads do pool de threads estiverem em uso e o callback for colocado em fila várias vezes.
Note
System.Threading.Timer é um temporizador simples e leve que utiliza métodos de callback e é servido por threads pool. Não é recomendado para uso com o Windows Forms, porque os seus callbacks não ocorrem na thread da interface do utilizador. System.Windows.Forms.Timer é uma escolha melhor para usar com Windows Forms. Para funcionalidades de temporizador baseado em servidor, pode considerar usar System.Timers.Timer, que gera eventos e tem funcionalidades adicionais.
Construtores
| Name | Description |
|---|---|
| Timer(TimerCallback, Object, Int32, Int32) |
Inicializa uma nova instância da |
| Timer(TimerCallback, Object, Int64, Int64) |
Inicializa uma nova instância da |
| Timer(TimerCallback, Object, TimeSpan, TimeSpan) |
Inicializa uma nova instância da |
| Timer(TimerCallback, Object, UInt32, UInt32) |
Inicializa uma nova instância da |
| Timer(TimerCallback) |
Inicializa uma nova instância da Timer classe com um período infinito e um tempo de vencimento infinito, usando o objeto recém-criado Timer como objeto de estado. |
Propriedades
| Name | Description |
|---|---|
| ActiveCount |
Obtém o número de temporizadores que estão atualmente ativos. Um temporizador ativo está registado para marcar em algum momento no futuro e ainda não foi cancelado. |
Métodos
| Name | Description |
|---|---|
| Change(Int32, Int32) |
Altera a hora de início e o intervalo entre invocações de métodos para um temporizador, usando inteiros com sinal de 32 bits para medir intervalos de tempo. |
| Change(Int64, Int64) |
Altera a hora de início e o intervalo entre invocações de métodos para um temporizador, usando inteiros com sinal de 64 bits para medir intervalos de tempo. |
| Change(TimeSpan, TimeSpan) |
Altera a hora de início e o intervalo entre invocações de métodos para um temporizador, usando TimeSpan valores para medir intervalos de tempo. |
| Change(UInt32, UInt32) |
Altera a hora de início e o intervalo entre invocações de métodos para um temporizador, usando inteiros sem sinal de 32 bits para medir intervalos de tempo. |
| CreateObjRef(Type) |
Cria um objeto que contém toda a informação relevante necessária para gerar um proxy usado para comunicar com um objeto remoto. (Herdado de MarshalByRefObject) |
| Dispose() |
Liberta todos os recursos usados pela instância atual de Timer. |
| Dispose(WaitHandle) |
Liberta todos os recursos usados pela instância atual de Timer e sinaliza quando o temporizador foi eliminado. |
| DisposeAsync() |
Liberta todos os recursos usados pela instância atual de Timer. |
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| Finalize() |
Permite que um objeto tente libertar recursos e realizar outras operações de limpeza antes de ser recuperado pela recolha de lixo. |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetLifetimeService() |
Obsoleto.
Recupera o objeto de serviço de tempo de vida atual que controla a política de vida útil neste caso. (Herdado de MarshalByRefObject) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| InitializeLifetimeService() |
Obsoleto.
Obtém-se um objeto de serviço vitalício para controlar a apólice vitalícia neste caso. (Herdado de MarshalByRefObject) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| MemberwiseClone(Boolean) |
Cria uma cópia superficial do objeto atual MarshalByRefObject . (Herdado de MarshalByRefObject) |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |
Métodos da Extensão
| Name | Description |
|---|---|
| ConfigureAwait(IAsyncDisposable, Boolean) |
Configura como aguarda nas tarefas devolvidas de um descartável assíncrono será realizada. |
Aplica-se a
Segurança de Thread
Este tipo é seguro para fios.