Я разрабатываю класс 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
в том же порядке, в котором хронологически происходят события.
Вы должны быть обеспокоены условиями гонки. Если бы я был вами, я бы использовал «lock». –
смотрите на этих страницах: http://stackoverflow.com/questions/786383/c-sharp-events-and-thread-safety и http://stackoverflow.com/questions/16216400/c-sharp-events- Выполнение-потоки-потоки –
Все ваши события уволены только из потока пользовательского интерфейса или из нескольких фоновых потоков? – 3615