Beispiel #1
0
        public void AddColumn(PanelColumnHeader header)
        {
            var column = LV.Columns.Add(header.Text, header.Width);

            column.TextAlign = (System.Windows.Forms.HorizontalAlignment)header.TextAlign;
            column.Tag       = header;
        }
Beispiel #2
0
        public void RegisterColumn <TPanelItem>(PanelColumnHeader header) where TPanelItem : PanelItemBase
        {
            IList <PanelColumnHeader> found;
            var typeName = typeof(TPanelItem).Name;

            if (!m_Types.TryGetValue(typeName, out found))
            {
                found = new List <PanelColumnHeader>();
                m_Types.Add(typeName, found);
            }
            header.Index = found.Count;
            found.Add(header);
            if (found.Count > m_MaxColumns)
            {
                m_MaxColumns = found.Count;
            }
        }
Beispiel #3
0
        public IComparable AsyncGetData(PanelColumnHeader column, PanelItemBase panelItem)
        {
            IComparable result;
            bool        found;

            lock (column)
            {
                found = column.LazyDict.TryGetValue(panelItem, out result);
            }
            if (found)
            {
                return(result);
            }
            lock (m_AsyncQueue)
            {
                if (m_AsyncQueue.Contains(panelItem))
                {
                    m_AsyncQueue.Remove(panelItem);
                }
                m_AsyncQueue.AddFirst(panelItem);
            }
            UpdateThreads(column);
            return(null);
        }
Beispiel #4
0
 private void UpdateThreads(PanelColumnHeader column)
 {
     if (NumThreads * NUM_CYCLES_IN_THREAD < m_AsyncQueue.Count)
     {
         lock (m_Threads)
         {
             // remove stopped threads
             for (int i = m_Threads.Count - 1; i >= 0; i--)
             {
                 if (m_Threads[i].ThreadState == ThreadState.Stopped)
                 {
                     m_Threads.RemoveAt(i);
                 }
             }
             // start new threads
             while (NumThreads * NUM_CYCLES_IN_THREAD < m_AsyncQueue.Count)
             {
                 var thread = new Thread(AsyncEnum);
                 m_Threads.Add(thread);
                 thread.Start(column);
             }
         }
     }
 }