private void MakeActive(string itemListId, List <ListViewItem> listViewItemList) { var queueList = m_listQueue.ToList(); AutoCompleteItemList itemList = queueList.Find(l => l.Tag is string && (l.Tag as string) == itemListId); MakeActive(itemList, listViewItemList); }
private void MakeActive(AutoCompleteItemList itemList, List <ListViewItem> listViewItemList) { m_currentListOfListViewItems = listViewItemList; var queueList = m_listQueue.ToList(); m_listQueue = new Queue <AutoCompleteItemList>(queueList.Except(new[] { itemList })); m_listQueue.Enqueue(itemList); //ganz hinten einfügen itemList.Show(); itemList.Visible = true; queueList.Except(new[] { itemList }).ToList().ForEach(l => { l.Visible = false; l.Hide(); }); m_currentActiveItemListControl = itemList; }
private void BuildItemListAsync(AutoCompleteItemList listControl, List <ListViewItem> listViewItemList, string itemListId) { lock (asyncItemAddLockObject) { m_addItemsRun++; } Action asyncAddAllItems = () => { int currentRun = m_addItemsRun; lock (asyncItemAddLockObject) { Action clearList = () => listControl.Items.Clear(); this.Invoke(clearList); } int pageStart = 0; int pageSize = 500; while (true) { pageSize = Math.Min(pageSize, listViewItemList.Count - pageStart); var page = listViewItemList.Skip(pageStart).Take(pageSize); Action addItem = () => listControl.Items.AddRange(page.ToArray()); lock (asyncItemAddLockObject) { if (m_addItemsRun != currentRun) { break; } this.BeginInvoke(addItem); } if (pageStart + pageSize == listViewItemList.Count) { break; } pageStart += Math.Min(pageSize, listViewItemList.Count - pageSize); } }; asyncAddAllItems.BeginInvoke(null, null); }