2016-11-30 27 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或10000个整数?我需要担心比赛条件吗?

我对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

您的所有事件只能从UI线程或多个后台线程触发? – 3615

回答

0

如果您使用ConcurrentQueue<int>,您将拥有线程安全的先进先出解决方案。

相关问题