public HandlerItem[] GetResultsFor(string search) { ThreadGroup searchGroup = new ThreadGroup(); List <HandlerItem> ret = new List <HandlerItem>(); foreach (GenericHandler handlerx in handlers) { GenericHandler handler = handlerx; searchGroup.AddAndRun(delegate() { HandlerItem[] tmp = handler.GetResultsFor(search); if (tmp == null) { return; } lock (ret) { ret.AddRange(tmp); } }); } searchGroup.WaitForCompletion(); return(ret.ToArray()); }