Timer Timer Timer Timer Class

Définition

Génère un événement au bout d'un intervalle défini, avec la possibilité de générer des événements récurrents.Generates an event after a set interval, with an option to generate recurring events.

public ref class Timer : System::ComponentModel::Component, System::ComponentModel::ISupportInitialize
public class Timer : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
type Timer = class
    inherit Component
    interface ISupportInitialize
Public Class Timer
Inherits Component
Implements ISupportInitialize
Héritage
Implémente

Exemples

L’exemple suivant instancie un System.Timers.Timer objet qui déclenche son Timer.Elapsed événement toutes les deux secondes (2 000 millisecondes), configure un gestionnaire d’événements pour l’événement et démarre le minuteur.The following example instantiates a System.Timers.Timer object that fires its Timer.Elapsed event every two seconds (2,000 milliseconds), sets up an event handler for the event, and starts the timer. Le gestionnaire d’événements affiche la valeur de ElapsedEventArgs.SignalTime la propriété chaque fois qu’elle est déclenchée.The event handler displays the value of the ElapsedEventArgs.SignalTime property each time it is raised.

using System;
using System.Timers;

public class Example
{
   private static System.Timers.Timer aTimer;
   
   public static void Main()
   {
      SetTimer();

      Console.WriteLine("\nPress the Enter key to exit the application...\n");
      Console.WriteLine("The application started at {0:HH:mm:ss.fff}", DateTime.Now);
      Console.ReadLine();
      aTimer.Stop();
      aTimer.Dispose();
      
      Console.WriteLine("Terminating the application...");
   }

   private static void SetTimer()
   {
        // Create a timer with a two second interval.
        aTimer = new System.Timers.Timer(2000);
        // Hook up the Elapsed event for the timer. 
        aTimer.Elapsed += OnTimedEvent;
        aTimer.AutoReset = true;
        aTimer.Enabled = true;
    }

    private static void OnTimedEvent(Object source, ElapsedEventArgs e)
    {
        Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}",
                          e.SignalTime);
    }
}
// The example displays output like the following:
//       Press the Enter key to exit the application...
//
//       The application started at 09:40:29.068
//       The Elapsed event was raised at 09:40:31.084
//       The Elapsed event was raised at 09:40:33.100
//       The Elapsed event was raised at 09:40:35.100
//       The Elapsed event was raised at 09:40:37.116
//       The Elapsed event was raised at 09:40:39.116
//       The Elapsed event was raised at 09:40:41.117
//       The Elapsed event was raised at 09:40:43.132
//       The Elapsed event was raised at 09:40:45.133
//       The Elapsed event was raised at 09:40:47.148
//
//       Terminating the application...
Imports System.Timers

Public Module Example
    Private aTimer As System.Timers.Timer

    Public Sub Main()
        SetTimer()

      Console.WriteLine("{0}Press the Enter key to exit the application...{0}",
                        vbCrLf)
      Console.WriteLine("The application started at {0:HH:mm:ss.fff}",
                        DateTime.Now)
      Console.ReadLine()
      aTimer.Stop()
      aTimer.Dispose()

      Console.WriteLine("Terminating the application...")
    End Sub

    Private Sub SetTimer()
        ' Create a timer with a two second interval.
        aTimer = New System.Timers.Timer(2000)
        ' Hook up the Elapsed event for the timer. 
        AddHandler aTimer.Elapsed, AddressOf OnTimedEvent
        aTimer.AutoReset = True
        aTimer.Enabled = True
    End Sub

    ' The event handler for the Timer.Elapsed event. 
    Private Sub OnTimedEvent(source As Object, e As ElapsedEventArgs)
        Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}",
                          e.SignalTime)
    End Sub 
End Module
' The example displays output like the following:
'       Press the Enter key to exit the application...
'
'       The application started at 09:40:29.068
'       The Elapsed event was raised at 09:40:31.084
'       The Elapsed event was raised at 09:40:33.100
'       The Elapsed event was raised at 09:40:35.100
'       The Elapsed event was raised at 09:40:37.116
'       The Elapsed event was raised at 09:40:39.116
'       The Elapsed event was raised at 09:40:41.117
'       The Elapsed event was raised at 09:40:43.132
'       The Elapsed event was raised at 09:40:45.133
'       The Elapsed event was raised at 09:40:47.148
'
'       Terminating the application...

Remarques

Le Timer composant est un minuteur basé sur un serveur qui Elapsed déclenche un événement dans votre application une fois que le nombre de Interval millisecondes dans la propriété s’est écoulé.The Timer component is a server-based timer that raises an Elapsed event in your application after the number of milliseconds in the Interval property has elapsed. Vous pouvez configurer l' Timer objet pour déclencher l’événement une seule fois ou de manière répétée à l’aide de la AutoReset propriété.You can configure the Timer object to raise the event just once or repeatedly using the AutoReset property. En général, Timer un objet est déclaré au niveau de la classe afin qu’il reste dans la portée tant qu’il est nécessaire.Typically, a Timer object is declared at the class level so that it stays in scope as long as it is needed. Vous pouvez ensuite gérer son Elapsed événement pour fournir un traitement régulier.You can then handle its Elapsed event to provide regular processing. Par exemple, supposons que vous ayez un serveur critique qui doit être maintenu en cours d’exécution 24 heures sur 24, 7 jours sur 7.For example, suppose you have a critical server that must be kept running 24 hours a day, 7 days a week. Vous pouvez créer un service qui utilise un Timer objet pour vérifier régulièrement le serveur et vérifier que le système est en cours d’exécution.You could create a service that uses a Timer object to periodically check the server and ensure that the system is up and running. Si le système ne répond pas, le service peut tenter de redémarrer le serveur ou de notifier un administrateur.If the system is not responding, the service could attempt to restart the server or notify an administrator.

Important

La Timer classe n’est pas disponible pour toutes les implémentations et versions de .net, telles que .NET standard 1,6 et versions antérieures.The Timer class is not available for all .NET implementations and versions, such as .NET Standard 1.6 and lower versions. Dans ce cas, vous pouvez utiliser la System.Threading.Timer classe à la place.In these cases, you can use the System.Threading.Timer class instead.

Ce type implémente l'interface IDisposable.This type implements the IDisposable interface. Une fois que vous avez fini d’utiliser le type, vous devez le supprimer directement ou indirectement.When you have finished using the type, you should dispose of it either directly or indirectly. Pour supprimer directement le type Dispose, appelez sa méthode dans un bloc try/catch.To dispose of the type directly, call its Dispose method in a try/catch block. Pour la supprimer indirectement, utilisez une construction de langage telle que using (dans C#) ou Using (dans Visual Basic).To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). Pour plus d’informations, consultez la section « Utilisation d’un objet qui implémente IDisposable » dans la rubrique de l’interface IDisposable.For more information, see the "Using an Object that Implements IDisposable" section in the IDisposable interface topic.

La classe basée sur System.Timers.Timer le serveur est conçue pour être utilisée avec les threads de travail dans un environnement multithread.The server-based System.Timers.Timer class is designed for use with worker threads in a multithreaded environment. Les minuteries de serveur peuvent se déplacer entre les threads pour gérer l’événement déclenché Elapsed , ce qui donne plus de précision que les minuteurs Windows en déclenchant l’événement à temps.Server timers can move among threads to handle the raised Elapsed event, resulting in more accuracy than Windows timers in raising the event on time.

Le System.Timers.Timer composant déclenche l' Elapsed événement, en fonction de la valeur (en millisecondes) de la Interval propriété.The System.Timers.Timer component raises the Elapsed event, based on the value (in milliseconds) of the Interval property. Vous pouvez gérer cet événement pour effectuer le traitement dont vous avez besoin.You can handle this event to perform the processing you need. Supposons, par exemple, que vous disposiez d’une application de ventes en ligne qui publie en continu des commandes sur une base de données.For example, suppose that you have an online sales application that continuously posts sales orders to a database. Le service qui compile les instructions pour l’expédition opère sur un lot de commandes plutôt que de traiter chaque commande individuellement.The service that compiles the instructions for shipping operates on a batch of orders rather than processing each order individually. Vous pouvez utiliser un Timer pour démarrer le traitement par lot toutes les 30 minutes.You could use a Timer to start the batch processing every 30 minutes.

Important

La classe System. Timers. Timer a la même résolution que l’horloge système.The System.Timers.Timer class has the same resolution as the system clock. Cela signifie que l' Elapsed événement se déclenche à un intervalle défini par la résolution de l’horloge système si la Interval propriété est inférieure à la résolution de l’horloge système.This means that the Elapsed event will fire at an interval defined by the resolution of the system clock if the Interval property is less than the resolution of the system clock. Pour plus d'informations, consultez la propriété Interval.For more information, see the Interval property.

Lorsque AutoReset a la falsevaleur, un System.Timers.Timer objet déclenche l' Elapsed événement une seule fois, une fois Interval que le premier s’est écoulé.When AutoReset is set to false, a System.Timers.Timer object raises the Elapsed event only once, after the first Interval has elapsed. Pour continuer à déclencher Elapsed l’événement régulièrement à l’intervalle défini par Intervalle, AutoReset définissez truesur, qui est la valeur par défaut.To keep raising the Elapsed event regularly at the interval defined by the Interval, set AutoReset to true, which is the default value.

Le Timer composant intercepte et supprime toutes les exceptions levées par les gestionnaires d' Elapsed événements pour l’événement.The Timer component catches and suppresses all exceptions thrown by event handlers for the Elapsed event. Ce comportement est susceptible de changer dans les versions ultérieures du .NET Framework.This behavior is subject to change in future releases of the .NET Framework. Notez, cependant, qu’il ne s’agit pas de gestionnaires d’événements qui s’exécutent de façon await asynchrone et incluent C#l’opérateur ( Await dans) ou l’opérateur (dans Visual Basic).Note, however, that this is not true of event handlers that execute asynchronously and include the await operator (in C#) or the Await operator (in Visual Basic). Les exceptions levées dans ces gestionnaires d’événements sont propagées vers le thread appelant, comme l’illustre l’exemple suivant.Exceptions thrown in these event handlers are propagated back to the calling thread, as the following example illustrates. Pour plus d’informations sur les exceptions levées dans les méthodes asynchrones, consultez gestion des exceptions.For more information on exceptions thrown in asynchronous methods, see Exception Handling.

using System;
using System.Threading.Tasks;
using System.Timers;

class Example
{
   static void Main()
   {
      Timer timer = new Timer(1000);
      timer.Elapsed += async ( sender, e ) => await HandleTimer();
      timer.Start();
      Console.Write("Press any key to exit... ");
      Console.ReadKey();
   }

   private static Task HandleTimer()
   {
     Console.WriteLine("\nHandler not implemented..." );
     throw new NotImplementedException();
   }
}
// The example displays output like the following:
//   Press any key to exit...
//   Handler not implemented...
//   
//   Unhandled Exception: System.NotImplementedException: The method or operation is not implemented.
//      at Example.HandleTimer()
//      at Example.<<Main>b__0>d__2.MoveNext()
//   --- End of stack trace from previous location where exception was thrown ---
//      at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c__DisplayClass2.<ThrowAsync>b__5(Object state)
//      at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
//      at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
//      at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
//      at System.Threading.ThreadPoolWorkQueue.Dispatch()
Imports System.Threading.Tasks
Imports System.Timers

Public Module Example
   Public Sub Main()
      Dim timer As New Timer(1000)  
      AddHandler timer.Elapsed, AddressOf Example.HandleTimer     
      'timer.Elapsed = Async ( sender, e ) => await HandleTimer()
      timer.Start()
      Console.Write("Press any key to exit... ")
      Console.ReadKey()
   End Sub

   Private Async Sub HandleTimer(sender As Object, e As EventArgs)
      Await Task.Run(Sub()
                        Console.WriteLine()
                        Console.WriteLine("Handler not implemented..." )
                        Throw New NotImplementedException()
                     End Sub)   
   End Sub
End Module
' The example displays output like the following:
'   Press any key to exit...
'   Handler not implemented...
'   
'   Unhandled Exception: System.NotImplementedException: The method or operation is not implemented.
'      at Example._Lambda$__1()
'      at System.Threading.Tasks.Task.Execute()
'   --- End of stack trace from previous location where exception was thrown ---
'      at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
'      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
'      at Example.VB$StateMachine_0_HandleTimer.MoveNext()
'   --- End of stack trace from previous location where exception was thrown ---
'      at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c__DisplayClass2.<ThrowAsync>b__5(Object state)
'      at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
'      at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
'      at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
'      at System.Threading.ThreadPoolWorkQueue.Dispatch()

Si la SynchronizingObject propriété est null, l' Elapsed événement est déclenché sur un ThreadPool thread.If the SynchronizingObject property is null, the Elapsed event is raised on a ThreadPool thread. Si le traitement de Elapsed l’événement dure plus Intervallongtemps que, l’événement peut être déclenché à ThreadPool nouveau sur un autre thread.If processing of the Elapsed event lasts longer than Interval, the event might be raised again on another ThreadPool thread. Dans ce cas, le gestionnaire d’événements doit être réentrant.In this situation, the event handler should be reentrant.

Notes

La méthode de gestion d’événements peut s’exécuter sur un thread en même temps qu’un autre thread Stop appelle la méthode ou Enabled affecte la falsevaleur à la propriété.The event-handling method might run on one thread at the same time that another thread calls the Stop method or sets the Enabled property to false. Cela peut entraîner le déclenchement Elapsed de l’événement après l’arrêt de la minuterie.This might result in the Elapsed event being raised after the timer is stopped. L’exemple de code de Stop la méthode illustre une façon d’éviter cette condition de concurrence.The example code for the Stop method shows one way to avoid this race condition.

Même si SynchronizingObject n’est nullpas Elapsed , les événements peuvent se Dispose produire Stop après que la méthode ou a été Enabled appelée ou une fois que falsela propriété a la valeur, car le signal pour déclencher l' événementElapsed l’événement est toujours mis en file d’attente pour l’exécution sur un thread de pool de threads.Even if SynchronizingObject is not null, Elapsed events can occur after the Dispose or Stop method has been called or after the Enabled property has been set to false, because the signal to raise the Elapsed event is always queued for execution on a thread pool thread. Une façon de résoudre cette condition de concurrence consiste à définir un indicateur qui indique au gestionnaire d’événements Elapsed de l’événement d’ignorer les événements suivants.One way to resolve this race condition is to set a flag that tells the event handler for the Elapsed event to ignore subsequent events.

Si vous utilisez la System.Timers.Timer classe avec un élément d’interface utilisateur, tel qu’un formulaire ou un contrôle, sans placer le minuteur sur cet élément d’interface utilisateur, assignez le Timer formulaire ou SynchronizingObject le contrôle qui contient le à la propriété, afin que l’événement soit marshalé vers le thread d’interface utilisateur.If you use the System.Timers.Timer class with a user interface element, such as a form or control, without placing the timer on that user interface element, assign the form or control that contains the Timer to the SynchronizingObject property, so that the event is marshaled to the user interface thread.

Pour obtenir la liste des valeurs de propriété par défaut pour Timerune instance de Timer , consultez le constructeur.For a list of default property values for an instance of Timer, see the Timer constructor.

Conseil

Sachez que .NET inclut quatre classes nommées Timer, chacune offrant des fonctionnalités différentes:Be aware that .NET includes four classes named Timer, each of which offers different functionality:

  • System.Timers.Timer(cette rubrique): déclenche un événement à intervalles réguliers.System.Timers.Timer (this topic): fires an event at regular intervals. La classe est destinée à être utilisée comme composant serveur ou service dans un environnement multithread. elle n’a pas d’interface utilisateur et n’est pas visible au moment de l’exécution.The class is intended for use as a server-based or service component in a multithreaded environment; it has no user interface and is not visible at runtime.
  • System.Threading.Timer: exécute une méthode de rappel unique sur un thread de pool de threads à intervalles réguliers.System.Threading.Timer: executes a single callback method on a thread pool thread at regular intervals. La méthode de rappel est définie lorsque la minuterie est instanciée et ne peut pas être modifiée.The callback method is defined when the timer is instantiated and cannot be changed. À l' System.Timers.Timer instar de la classe, cette classe est destinée à être utilisée comme composant serveur ou service dans un environnement multithread; elle n’a pas d’interface utilisateur et n’est pas visible au moment de l’exécution.Like the System.Timers.Timer class, this class is intended for use as a server-based or service component in a multithreaded environment; it has no user interface and is not visible at runtime.
  • System.Windows.Forms.Timer(.NET Framework uniquement): composant Windows Forms qui déclenche un événement à intervalles réguliers.System.Windows.Forms.Timer (.NET Framework only): a Windows Forms component that fires an event at regular intervals. Le composant ne possède pas d’interface utilisateur et est conçu pour une utilisation dans un environnement à thread unique.The component has no user interface and is designed for use in a single-threaded environment.
  • System.Web.UI.Timer(.NET Framework uniquement): composant ASP.NET qui effectue des publications asynchrones ou synchrones de pages Web à intervalles réguliers.System.Web.UI.Timer (.NET Framework only): an ASP.NET component that performs asynchronous or synchronous web page postbacks at a regular interval.

Constructeurs

Timer() Timer() Timer() Timer()

Initialise une nouvelle instance de la classe Timer et affecte à toutes les propriétés leurs valeurs initiales.Initializes a new instance of the Timer class, and sets all the properties to their initial values.

Timer(Double) Timer(Double) Timer(Double) Timer(Double)

Initialise une nouvelle instance de la classe Timer et affecte le nombre spécifié de millisecondes à la propriété Interval.Initializes a new instance of the Timer class, and sets the Interval property to the specified number of milliseconds.

Propriétés

AutoReset AutoReset AutoReset AutoReset

Obtient ou définit une valeur booléenne indiquant si Timer doit déclencher l'événement Elapsed une seule fois (false) ou de façon répétée (true).Gets or sets a Boolean indicating whether the Timer should raise the Elapsed event only once (false) or repeatedly (true).

CanRaiseEvents CanRaiseEvents CanRaiseEvents CanRaiseEvents

Obtient une valeur qui indique si le composant peut déclencher un événement.Gets a value indicating whether the component can raise an event.

(Inherited from Component)
Container Container Container Container

Obtient le IContainer qui contient Component.Gets the IContainer that contains the Component.

(Inherited from Component)
DesignMode DesignMode DesignMode DesignMode

Obtient une valeur qui indique si Component est actuellement en mode design.Gets a value that indicates whether the Component is currently in design mode.

(Inherited from Component)
Enabled Enabled Enabled Enabled

Obtient ou définit une valeur indiquant si Timer doit déclencher l'événement Elapsed.Gets or sets a value indicating whether the Timer should raise the Elapsed event.

Events Events Events Events

Obtient la liste des gestionnaires d'événements attachés à ce Component.Gets the list of event handlers that are attached to this Component.

(Inherited from Component)
Interval Interval Interval Interval

Obtient ou définit l'intervalle, exprimé en millisecondes, auquel l'événement Elapsed doit être déclenché.Gets or sets the interval, expressed in milliseconds, at which to raise the Elapsed event.

Site Site Site Site

Obtient ou définit le site qui lie Timer à son conteneur en mode design.Gets or sets the site that binds the Timer to its container in design mode.

SynchronizingObject SynchronizingObject SynchronizingObject SynchronizingObject

Obtient ou définit l'objet utilisé pour marshaler les appels du gestionnaire d'événements émis quand un intervalle a expiré.Gets or sets the object used to marshal event-handler calls that are issued when an interval has elapsed.

Méthodes

BeginInit() BeginInit() BeginInit() BeginInit()

Débute l'initialisation au moment de l'exécution d'un Timer utilisé sur un formulaire ou par un autre composant.Begins the run-time initialization of a Timer that is used on a form or by another component.

Close() Close() Close() Close()

Libère les ressources utilisées par le Timer.Releases the resources used by the Timer.

CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type)

Crée un objet contenant toutes les informations appropriées requises pour générer un proxy permettant de communiquer avec un objet distant.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Inherited from MarshalByRefObject)
Dispose() Dispose() Dispose() Dispose()

Libère toutes les ressources utilisées par Component.Releases all resources used by the Component.

(Inherited from Component)
Dispose(Boolean) Dispose(Boolean) Dispose(Boolean) Dispose(Boolean)

Libère toutes les ressources utilisées par le Timer actuel.Releases all resources used by the current Timer.

EndInit() EndInit() EndInit() EndInit()

Met fin à l'initialisation au moment de l'exécution d'un Timer utilisé sur un formulaire ou par un autre composant.Ends the run-time initialization of a Timer that is used on a form or by another component.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Détermine si l'objet spécifié est identique à l'objet actuel.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Fait office de fonction de hachage par défaut.Serves as the default hash function.

(Inherited from Object)
GetLifetimeService() GetLifetimeService() GetLifetimeService() GetLifetimeService()

Récupère l'objet de service de durée de vie en cours qui contrôle la stratégie de durée de vie de cette instance.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
GetService(Type) GetService(Type) GetService(Type) GetService(Type)

Retourne un objet qui représente un service fourni par Component ou par son Container.Returns an object that represents a service provided by the Component or by its Container.

(Inherited from Component)
GetType() GetType() GetType() GetType()

Obtient le Type de l'instance actuelle.Gets the Type of the current instance.

(Inherited from Object)
InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService()

Obtient un objet de service de durée de vie pour contrôler la stratégie de durée de vie de cette instance.Obtains a lifetime service object to control the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crée une copie superficielle de l'objet Object actuel.Creates a shallow copy of the current Object.

(Inherited from Object)
MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean)

Crée une copie superficielle de l'objet MarshalByRefObject actuel.Creates a shallow copy of the current MarshalByRefObject object.

(Inherited from MarshalByRefObject)
Start() Start() Start() Start()

Lance le déclenchement de l'événement Elapsed en affectant à Enabled la valeur true.Starts raising the Elapsed event by setting Enabled to true.

Stop() Stop() Stop() Stop()

Arrête le déclenchement de l'événement Elapsed en affectant à Enabled la valeur false.Stops raising the Elapsed event by setting Enabled to false.

ToString() ToString() ToString() ToString()

Retourne un String contenant le nom du Component, s’il en existe un.Returns a String containing the name of the Component, if any. Cette méthode ne doit pas être remplacée.This method should not be overridden.

(Inherited from Component)

Événements

Disposed Disposed Disposed Disposed

Se produit lorsque le composant est supprimé par un appel à la méthode Dispose().Occurs when the component is disposed by a call to the Dispose() method.

(Inherited from Component)
Elapsed Elapsed Elapsed Elapsed

Se produit quand l'intervalle est écoulé.Occurs when the interval elapses.

S’applique à

Cohérence de thread

Tous les static membres publics de ce type sont thread-safe.Any public static members of this type are thread safe. Il n'est pas garanti que les membres d'instance soient thread-safe.Any instance members are not guaranteed to be thread safe.

Voir aussi