protected void AddNewWait(OutputWait wait) { lock (Waits) Waits.Add(wait); lock (FilteredOutput) { for (int i = 0; i < FilteredOutput.Count; i++) { var ol = FilteredOutput[i]; if (wait.IsMatch(ol.Item2)) { FilteredOutput.RemoveAt(i); lock (Waits) Waits.Remove(wait); wait.Signal.Set(); return; } } } }