private bool WaitForUpdates(Subscription subscription, List<MonitoredItem> monitoredItems, bool afterDisable)
{
bool success = true;
DateTime deadline = DateTime.UtcNow.AddMilliseconds((double)(subscription.PublishingInterval*3 + m_maximumTimingError));
do
{
int count = 0;
lock (subscription)
{
for (int ii = 0; ii < subscription.NotificationMessages.Count; ii++)
{
for (int jj = 0; jj < subscription.NotificationMessages[ii].NotificationData.Count; jj++)
{
ExtensionObject extension = subscription.NotificationMessages[ii].NotificationData[jj];
DataChangeNotification notification = extension.Body as DataChangeNotification;
if (notification != null)
{
count += notification.MonitoredItems.Count;
}
}
}
}
if (count == monitoredItems.Count)
{
break;
}
if (m_errorEvent.WaitOne(100, false))
{
success = false;
break;
}
if (subscription.Failed)
{
success = false;
break;
}
}
while(deadline > DateTime.UtcNow);
if (success)
{
lock (subscription)
{
if (!VerifyInitialDataChange(subscription, monitoredItems, afterDisable))
{
success = false;
}
}
}
return success;
}