private void Refresh(uint maxAge, int transactionId, bool isFirstUpdate, out int cancelId)
{
TraceState("Refresh", maxAge);
ThrowIfDisposed();
cancelId = 0;
lock (m_lock)
{
// no refresh in inactive groups.
if (!m_active)
{
throw ComUtils.CreateComException(ResultIds.E_FAIL);
}
// collect active items.
List<ComDaGroupItem> items = new List<ComDaGroupItem>(m_items.Count);
for (int ii = 0; ii < m_items.Count; ii++)
{
ComDaGroupItem item = m_items[ii];
if (item.Active)
{
items.Add(item);
}
}
// no refresh if no active items.
if (items.Count == 0)
{
throw ComUtils.CreateComException(ResultIds.E_FAIL);
}
// create the request.
ComDaAsnycReadRequest request = new ComDaAsnycReadRequest();
request.CancelId = ++m_transactionCounter;
request.TransactionId = transactionId;
request.IsFirstUpdate = isFirstUpdate;
request.MaxAge = maxAge;
request.IsRefresh = true;
request.ServerHandles = new int[items.Count];
request.ClientHandles = new int[items.Count];
for (int ii = 0; ii < items.Count; ii++)
{
request.ServerHandles[ii] = items[ii].ServerHandle;
request.ClientHandles[ii] = items[ii].ClientHandle;
}
m_requests.Add(request);
cancelId = request.CancelId;
// create a thread to process the request.
Thread thread = new Thread(OnAsyncRead);
thread.IsBackground = true;
thread.Start(request);
}
}