private void StartActivityExecutionTracking(Activity activity) { lock (s_activitiesStackSync) { _executingActivitiesStack.Push(activity.Name); } var eventArgs = new WorkflowExecutionContextEventArgs(this, activity); ActivityExecutionStarting.RaiseEvent(this, eventArgs); if (!Tracking) return; if (_restoring) { if (_trackingActivitiesStack[_restoredActivitiesCount] != activity.Name) { var msg = string.Format( "Ошибка при восстановлении выполнения потока работ: " + "действие {0}, которое начинает выполнение, отличается от действия {1}, " + "которое, согласно информации в контексте, должно начать выполнение", activity.Name, _trackingActivitiesStack[_restoredActivitiesCount]); throw new ActivityExecutionException(msg, activity, this); } _restoredActivitiesCount++; if (_restoredActivitiesCount == _trackingActivitiesStack.Count) _restoring = false; return; } _trackingActivitiesStack.Push(activity.Name); ExecutionContextChanged.RaiseEvent(this, eventArgs); }
private void ExecutionContext_ActivityExecutionFinished(object sender, WorkflowExecutionContextEventArgs e) { if (_pressedKeys.Count > 0) { LogActivityKeys(); } Logger.LogVerbose(Message.WorkflowActivityExecutionFinished, e.Activity.Name); }
private void ExecutionContext_ActivityExecutionStarting(object sender, WorkflowExecutionContextEventArgs e) { Logger.LogVerbose(Message.WorkflowActivityExecutionStarting, e.Activity.Name); if (// это главный сканер _syncManager.ScannerRole == ScannerRole.Master && e.Context.Tracking) { _stateActivityName = e.Activity.Name; RaiseStateChanged(); } }
private void EndActivityExecutionTracking(Activity activity) { lock (s_activitiesStackSync) { SafePopFromStack(_executingActivitiesStack, activity); } var eventArgs = new WorkflowExecutionContextEventArgs(this, activity); ActivityExecutionFinished.RaiseEvent(this, eventArgs); if (!Tracking) return; if (_restoring) return; SafePopFromStack(_trackingActivitiesStack, activity); ExecutionContextChanged.RaiseEvent(this, eventArgs); }