File: WorkflowEventArgs.cs
Project: ndp\cdf\src\WF\RunTime\System.Workflow.Runtime.csproj (System.Workflow.Runtime)
// ****************************************************************************
// Copyright (C) Microsoft Corporation.  All rights reserved.
//
 
using System;
using System.IO;
using System.Threading;
using System.Diagnostics;
using System.Globalization;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
 
using System.Workflow.Runtime;
using System.Workflow.ComponentModel;
using System.Workflow.Runtime.Hosting;
 
namespace System.Workflow.Runtime
{
 
    [Obsolete("The System.Workflow.* types are deprecated.  Instead, please use the new types from System.Activities.*")]
    public class WorkflowEventArgs : EventArgs
    {
        private WorkflowInstance _instance;
 
        internal WorkflowEventArgs(WorkflowInstance instance)
        {
            _instance = instance;
        }
 
        public WorkflowInstance WorkflowInstance
        {
            get
            {
                return _instance;
            }
        }
    }
 
    [Obsolete("The System.Workflow.* types are deprecated.  Instead, please use the new types from System.Activities.*")]
    public class WorkflowCompletedEventArgs : WorkflowEventArgs
    {
        private Dictionary<String, Object> _outputParameters;
        private Activity _originalWorkflowDefinition;
        private Activity _workflowDefinition;
 
        internal WorkflowCompletedEventArgs(WorkflowInstance instance, Activity workflowDefinition)
            : base(instance)
        {
            this._outputParameters = new Dictionary<String, Object>();
            this._originalWorkflowDefinition = workflowDefinition;
            this._workflowDefinition = null;
        }
 
        public Dictionary<String, Object> OutputParameters
        {
            get
            {
                return this._outputParameters;
            }
        }
 
        public Activity WorkflowDefinition
        {
            get
            {
                if (this._workflowDefinition == null)
                {
                    using (new WorkflowDefinitionLock(this._originalWorkflowDefinition))
                    {
                        if (this._workflowDefinition == null)
                        {
                            // Clone the original definition after locking the
                            // definition's sync object which was passed in
                            // the constructor.  This is so that the host cannot
                            // corrupt the shared definition
                            Activity tempDefinition = this._originalWorkflowDefinition.Clone();
                            Thread.MemoryBarrier();
                            this._workflowDefinition = tempDefinition;
                        }
                    }
                }
 
                return this._workflowDefinition;
            }
        }
    }
 
    [Obsolete("The System.Workflow.* types are deprecated.  Instead, please use the new types from System.Activities.*")]
    public class WorkflowSuspendedEventArgs : WorkflowEventArgs
    {
        private String _error;
 
        internal WorkflowSuspendedEventArgs(WorkflowInstance instance, String error)
            : base(instance)
        {
            this._error = error;
        }
 
        public String Error
        {
            get
            {
                return this._error;
            }
        }
    }
 
    [Obsolete("The System.Workflow.* types are deprecated.  Instead, please use the new types from System.Activities.*")]
    public class WorkflowTerminatedEventArgs : WorkflowEventArgs
    {
        private Exception exception;
 
        internal WorkflowTerminatedEventArgs(WorkflowInstance instance, String error)
            : base(instance)
        {
            this.exception = new WorkflowTerminatedException(error);
        }
        internal WorkflowTerminatedEventArgs(WorkflowInstance instance, Exception e)
            : base(instance)
        {
            this.exception = e;
        }
 
        public Exception Exception
        {
            get
            {
                return this.exception;
            }
        }
    }
 
    internal sealed class WorkflowDefinitionEventArgs : EventArgs
    {
        private Type _workflowType;
        private byte[] _xomlHashCode;
 
        internal WorkflowDefinitionEventArgs(Type scheduleType)
        {
            _workflowType = scheduleType;
        }
 
        internal WorkflowDefinitionEventArgs(byte[] scheduleDefHash)
        {
            _xomlHashCode = scheduleDefHash;
        }
 
        public Type WorkflowType
        {
            get
            {
                return _workflowType;
            }
        }
 
        public byte[] WorkflowDefinitionHashCode
        {
            get
            {
                return _xomlHashCode;
            }
        }
    }
}