Je suis en train de développer une classe C# dans laquelle on m'attribue un buffer de tableau, et chaque fois qu'un événement se déclenche, je remplis l'élément suivant dans mon tableau. Ainsi, par exemple:Comment garantir l'ordre chronologique de la copie d'éléments dans un tableau dans C#/.NET en utilisant des événements?
class MyClass
{
private int[] buffer = new int[10];
private int index = 0;
public void EventFired(object sender, IntEventArgs e)
{
buffer[index] = e.Integer;
index++;
}
}
Si j'ai plusieurs événements qui licencient au sein de la succession rapide d'une autre, par exemple tous 0,5-1,0 ms, va EventFired
remplir le tableau dans l'ordre que les événements ont été tirés? Et si au lieu de stocker un entier à chaque fois que l'événement se déclenche, je stockais 2.000 ou 10.000 entiers? Dois-je m'inquiéter des conditions de course? Je ne suis pas si familier avec le fonctionnement interne de C# /. NET, donc nous aimerions des conseils sur la façon de garantir que nous peupler buffer
dans le même ordre dans lequel les événements ont tiré chronologiquement.
Vous devriez vous inquiéter des conditions de course. Si j'étais vous j'utiliserais 'lock'. –
jetez un oeil sur ces pages: http://stackoverflow.com/questions/786383/c-sharp-events-and-thread-safety et http://stackoverflow.com/questions/16216400/c-sharp-events- execution-are-thread-safe –
Tous vos événements sont déclenchés uniquement à partir du thread UI ou de plusieurs threads d'arrière-plan? – 3615