IEnumerator EndOfFrame() { while (true) { yield return waitForEndOfFrame; lock (pendingEvents.SyncRoot) { while (pendingEvents.Count > 0) { PhoneEvent phoneEvent = (PhoneEvent) pendingEvents.Dequeue(); ProcessEventAtEndOfFrame(phoneEvent); } } } }