/// <summary> /// Realtime analysis /// </summary> /// <param name="dataConsumer">Data consumer</param> /// <param name="input">Input</param> /// <param name="act">Action</param> /// <param name="reason">Reason</param> /// <param name="timeType">Time type</param> /// <param name="isAbsoluteTime">The absolute time "sign"</param> public static void RealtimeAnalysis(this IDataConsumer dataConsumer, IEnumerable <object> input, string reason, Action <object> act, TimeType timeType, bool isAbsoluteTime) { IDesktop desktop = (dataConsumer as IAssociatedObject).GetRootDesktop(); IComponentCollection collection = dataConsumer.CreateCollection( reason); StaticExtensionEventInterfaces.NewLog = null; using (IDisposable disp = collection.StartRealtime(timeType, isAbsoluteTime, null, dataConsumer, null, reason) as IDisposable) { IRealtime r = disp as IRealtime; RealtimeProvider p = r.TimeProvider as RealtimeProvider; Dictionary <IReplacedMeasurementParameter, string> d; IEnumerable <object> list = dataConsumer.CreateList(input, collection, out d); DateTime centuryBegin = new DateTime(2001, 1, 1); using (ReplacedMeasurementsBackup backup = new ReplacedMeasurementsBackup(d, r)) { Dictionary <string, object>[] dm = backup.Output; foreach (object obj in list) { try { if (obj is Tuple <INativeReader, object[], DateTime> ) { Tuple <INativeReader, object[], DateTime> t = obj as Tuple <INativeReader, object[], DateTime>; p.DateTime = t.Item3; t.Item1.Read(t.Item2); act(t); continue; } } catch { continue; } Tuple <DateTime, INativeEvent, Dictionary <string, object> > tuple = obj as Tuple <DateTime, INativeEvent, Dictionary <string, object> >; dm[0] = tuple.Item3; DateTime dt = tuple.Item1; p.DateTime = tuple.Item1; tuple.Item2.Force(); act(tuple); } } } }