2016-11-30 1 views
0

Я разрабатываю класс C#, где мне назначается буфер массива, и каждый раз, когда срабатывает событие, я заполняю следующий элемент в моем массиве. Так, например:Как обеспечить хронологический порядок копирования элементов в массив в C# /. NET с помощью событий?

class MyClass 
{ 
    private int[] buffer = new int[10]; 
    private int index = 0; 

    public void EventFired(object sender, IntEventArgs e) 
    { 
     buffer[index] = e.Integer; 
     index++; 
    } 
} 

Если у меня есть несколько событий, которые стреляют в быстрой последовательности друг от друга, скажем, через каждые 0,5-1,0 мс, будет EventFired заполнить массив в порядке, которые были уволены события? Что, если вместо хранения одного целого каждый раз, когда происходит событие, я хранили 2000 или 10 000 целых чисел? Нужно ли беспокоиться о гоночных условиях?

Я не так хорошо знаком с внутренними разработками C# /. NET, поэтому хотел бы посоветовать, как гарантировать, что мы заполняем buffer в том же порядке, в котором хронологически происходят события.

+0

Вы должны быть обеспокоены условиями гонки. Если бы я был вами, я бы использовал «lock». –

+0

смотрите на этих страницах: http://stackoverflow.com/questions/786383/c-sharp-events-and-thread-safety и http://stackoverflow.com/questions/16216400/c-sharp-events- Выполнение-потоки-потоки –

+2

Все ваши события уволены только из потока пользовательского интерфейса или из нескольких фоновых потоков? – 3615

ответ

0

Если вы используете ConcurrentQueue<int>, у вас будет первое, первое решение, которое является потокобезопасным.