Q:

Index was outside of bounds in multithread application

I have a list of integers that is updated in the main thread every time an event is raised. Then, when another event is raised, I wanna read the values of this list and process them. However, when I am reading the values of the list I get the error Index was outside of the bounds of the array. I guess it happens because of the multi-thread but I added the locks and still keeps happening. Is this code thread safe?
The list is updated everytime there is new data.
public void onDataRead(object source, DataEventArgs e)
{
  lock (_bufferTriggerSignal)
  {
          for (int sampleIdx = 0; sampleIdx < e.rawData.Length; sampleIdx++)
          _bufferTriggerSignal.Add((int)e.rawData[sampleIdx]);
   }
}   

And then, once OnPresentationEndEvent is raised, the data is converted to an array and processed. A new thread is created to process the data:
public void OnPresentationEndEvent(object source, EventArgs e)
{
    Thread.Sleep(500) //500ms of extra data are needed before processing it
    Thread _t= new Thread(() => processData());
    _t.Start();                  
}

public void processData()
{
   lock (_bufferTriggerSignal)
   {
    if (_bufferTriggerSignal != null && _bufferTriggerSignal.Count > 0)
    {
         int[] arrayTriggerSignal = _bufferTriggerSignal.ToArray();

         int[,] triggerSignal = new int[1, arrayTriggerSignal.Length];
         for (int i = 0; i < arrayTriggerSignal.Length; i++)
            triggerSignal[1, i] = arrayTriggerSignal[i]; //ERROR INDEX OUT OF BOUNDS
        processData(triggerSignal);
     }
  }
}

A:

It's not a concurrency problem. It's an index problem.
triggerSignal[1, i]

should be
triggerSignal[0, i]

