コード例 #1
0
 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); 
 } 
コード例 #2
0
 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); 
 }