KeePass.UI.AsyncPwListUpdate.Queue C# (CSharp) Method

Queue() public method

public Queue ( string strText, PwListItem li, int iIndexHint, int iSubItem, PwTextUpdateDelegate f ) : void
strText string
li PwListItem
iIndexHint int
iSubItem int
f PwTextUpdateDelegate
return void
        public void Queue(string strText, PwListItem li, int iIndexHint,
            int iSubItem, PwTextUpdateDelegate f)
        {
            if(strText == null) { Debug.Assert(false); return; }
            if(li == null) { Debug.Assert(false); return; }
            if(iSubItem < 0) { Debug.Assert(false); return; }
            if(f == null) { Debug.Assert(false); return; }

            LviUpdInfo state = new LviUpdInfo();
            state.ListView = m_lv;
            state.UpdateID = unchecked((li.ListViewItemID << 6) + iSubItem);
            state.Text = strText;
            state.ListItem = li;
            state.IndexHint = ((iIndexHint >= 0) ? iIndexHint : 0);
            state.SubItem = iSubItem;
            state.Function = f;
            state.ListEditSyncObject = m_objListEditSync;
            state.ValidIDsSyncObject = m_objValidIDsSync;
            state.ValidIDs = m_dValidIDs;

            lock(m_objValidIDsSync)
            {
                Debug.Assert(!m_dValidIDs.ContainsKey(state.UpdateID));
                m_dValidIDs[state.UpdateID] = true;
            }

            try
            {
                if(!ThreadPool.QueueUserWorkItem(new WaitCallback(UpdateItemFn),
                    state)) throw new InvalidOperationException();
            }
            catch(Exception)
            {
                Debug.Assert(false);
                lock(m_objValidIDsSync) { m_dValidIDs.Remove(state.UpdateID); }
            }
        }