// TODO: Call directly if called from the same thread public override void Send(SendOrPostCallback d, System.Object state) { PendingSendOrPost ev = new PendingSendOrPost(d, state); lock (pendingEvents.SyncRoot) { pendingEvents.Enqueue(ev); } GLib.Idle.Add(ProcessEventsIdleHandler); ev.Wait(); }
private bool ProcessEventsIdleHandler() { while (true) { PendingSendOrPost ev = null; lock (pendingEvents.SyncRoot) { if (pendingEvents.Count == 0) { return(false); } ev = pendingEvents.Dequeue() as PendingSendOrPost; } ev.Invoke(); } }