private void ThreadProc() { while (!disposing) { if (inputProvider != null) { ContactInfo[] contacts = inputProvider.GetContacts(); legacySupportLogic.Process(contacts); if (contacts.Length > 0) { HashSet <IMultitouchServiceCallback> .Enumerator enumerator = callbacks.GetEnumerator(); List <IMultitouchServiceCallback> failed = new List <IMultitouchServiceCallback>(); while (enumerator.MoveNext()) { try { enumerator.Current.ProcessContact(contacts); } catch (Exception) { failed.Add(enumerator.Current); } } foreach (IMultitouchServiceCallback failedCallback in failed) { callbacks.Remove(failedCallback); } } } } }