internal ReflectTransformBlock(TransformBlock <TIn, TOut> block, IBlockInitializer propertySetter) : base(block, propertySetter) { if (block == null) { return; } #region targetCoreField FieldInfo targetCoreField = block.GetType().GetField("m_target", ReflectBlockExtensions.DEFAULT_FLAGS); object targetCore = targetCoreField.GetValue(block); MethodInfo getTargetDebuggingInformationMethod = targetCore.GetType().GetMethod("GetDebuggingInformation", ReflectBlockExtensions.DEFAULT_FLAGS); _targetDebugInfo = getTargetDebuggingInformationMethod.Invoke(targetCore, new object[0]); #endregion // targetCoreField //propertySetter.AddProperty("Input Count", () => block.InputCount, 3, Colors.White); //propertySetter.AddProperty("Output Count", () => block.OutputCount, 4, Colors.White); propertySetter.SetInputQueueFactory(() => ReflectBlockExtensions.GetInputQueue(_targetDebugInfo)); //propertySetter.SetOutputQueueFactory(() => ReflectBlockExtensions.GetOutputQueue(_sourceDebugInfo)); propertySetter.SetPostponedMessagesFactory(() => ReflectBlockExtensions.GetProsponedQueue(_targetDebugInfo)); propertySetter.AddProperty("Current Parallelism", () => ReflectBlockExtensions.GetCurrentDegreeOfParallelism(_targetDebugInfo), 60, Colors.WhiteSmoke); //propertySetter.SetBlockOptions(ReflectBlockExtensions.GetDataflowBlockOptions(_targetDebugInfo)); }
private void InitProperties(IDataflowBlock block, IBlockInitializer propertySetter) { propertySetter.SetInputQueueFactory(() => ReflectBlockExtensions.GetInputQueue(_debugInfo)); propertySetter.SetPostponedMessagesFactory(() => ReflectBlockExtensions.GetProsponedQueue(_debugInfo)); propertySetter.AddProperty("Current Parallelism", () => ReflectBlockExtensions.GetCurrentDegreeOfParallelism(_debugInfo), 60, Colors.WhiteSmoke); propertySetter.AddProperty("Is Completed", () => ReflectBlockExtensions.GetIsCompleted(_debugInfo), 61, Colors.WhiteSmoke); propertySetter.AddProperty("Declined Permanently", () => ReflectBlockExtensions.GetIsDecliningPermanently(_debugInfo), 62, Colors.WhiteSmoke); propertySetter.SetBlockOptions(ReflectBlockExtensions.GetDataflowBlockOptions(_debugInfo)); }
private void SetBoundingState(IDataflowBlock block, IBlockInitializer propertySetter) { FieldInfo field = block.GetType().GetField("m_boundingState", ReflectBlockExtensions.DEFAULT_FLAGS); object boundingState = field.GetValue(block); if (boundingState != null) { #region TaskForInputProcessing FieldInfo fieldTaskForInputProcessing = boundingState.GetType().GetField("TaskForInputProcessing", ReflectBlockExtensions.DEFAULT_FLAGS); propertySetter.AddProperty("Is Processing Input", () => { Task taskForInputProcessing = fieldTaskForInputProcessing.GetValue(boundingState) as Task; if (taskForInputProcessing == null) { return(false); } return(taskForInputProcessing.Status == TaskStatus.Running); }, 9, Colors.White); #endregion // TaskForInputProcessing #region PostponedMessages FieldInfo fieldPostponedMessages = boundingState.GetType().GetField("PostponedMessages", ReflectBlockExtensions.DEFAULT_FLAGS); Func <IEnumerable <PostponedMessage> > postponedMessagesFactory = () => { var kvc = fieldPostponedMessages.GetValue(boundingState) as IEnumerable <KeyValuePair <ISourceBlock <T>, DataflowMessageHeader> >; var result = from pair in kvc select new PostponedMessage(pair.Key, pair.Value); return(result); }; propertySetter.SetPostponedMessagesFactory(postponedMessagesFactory); #endregion // PostponedMessages } }