public List <debug_event> get_events(int least_id)
        {
            if (read_thread_ == null)
            {
                read_thread_ = new Thread(read_events_thread)
                {
                    IsBackground = true
                };
                read_thread_.Start();
            }

            lock (this) {
                if (events_.Count > 0)
                {
                    Debug.Assert(events_.Last().unique_id == events_.Count - 1);
                }
                if (least_id < events_.Count)
                {
                    return(events_.GetRange(least_id, events_.Count - least_id));
                }
                else
                {
                    return(new List <debug_event>());
                }
            }
        }