private void AsyncDoWork(object sender, EventArgs eventArgs)
{
if (BeforeExecuteQuery != null)
{
BeforeExecuteQuery(this, EventArgs.Empty);
}
DateTime startTime;
DateTime stopTime;
DateTime currentTime;
object token;
List <MetadataBase> activeSignals;
lock (m_syncRoot)
{
token = m_requestToken;
m_requestToken = null;
if (Mode == ExecutionMode.Manual)
{
startTime = m_lowerBounds;
stopTime = m_upperBounds;
currentTime = m_focusedDate;
activeSignals = m_activeSignals;
}
else
{
m_playback.GetTimes(out startTime, out stopTime);
currentTime = stopTime;
activeSignals = m_activeSignals;
}
}
IDictionary <Guid, SignalDataBase> results = m_query.GetQueryResult(startTime, stopTime, 0, activeSignals);
QueryResultsEventArgs queryResults = new QueryResultsEventArgs(results, token, startTime, stopTime);
if (AfterQuery != null)
{
AfterQuery(this, EventArgs.Empty);
}
if (NewQueryResults != null)
{
NewQueryResults.ParallelRunAndWait(this, queryResults);
}
if (SynchronousNewQueryResults != null || ParallelWithControlLockNewQueryResults != null)
{
m_syncEvent.RaiseEvent(new QueryResultsEventArgs(results, token, startTime, stopTime));
}
lock (m_syncRoot)
{
if (Mode == ExecutionMode.Automatic)
{
m_async.Start(m_refreshInterval.Milliseconds);
}
}
if (AfterExecuteQuery != null)
{
AfterExecuteQuery(this, EventArgs.Empty);
}
}