public void Process(Complex *buffer, int length) { var rPtr = (float *)buffer; var iPtr = rPtr + 1; if (_isMultithreaded) { DSPThreadPool.QueueUserWorkItem( delegate { _rDecimator.ProcessInterleaved(rPtr, length); _event.Set(); }); } else { _rDecimator.ProcessInterleaved(rPtr, length); } _iDecimator.ProcessInterleaved(iPtr, length); if (_isMultithreaded) { _event.WaitOne(); } }