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); }
}
}