private void EventWorker() { Action EventNotifier = null; ToDeviceCallback[] EventListCopy = new ToDeviceCallback[255]; int EventCount; int TimeSlice; EventNotifier = delegate { EventCount = RegularEventList.Count; RegularEventList.CopyTo(EventListCopy); if (EventCount > 0) { TimeSlice = Config.RefreshRate / EventCount; for (int i = EventCount; i >= 0; --i) { if (EventListCopy[i] != null) { EventListCopy[i](); Thread.Sleep(TimeSlice); } } } else { Thread.Sleep(Config.RefreshRate); } }; DoEventDispatching = true; Debug.Log("KerbalSimpit: Starting event dispatch loop"); while (DoEventDispatching) { EventNotifier(); } Debug.Log("KerbalSimpit: Event dispatch loop exiting"); }
public static bool RemoveToDeviceHandler(ToDeviceCallback cb) { return(RegularEventList.Remove(cb)); }
public static void AddToDeviceHandler(ToDeviceCallback cb) { RegularEventList.Add(cb); }