Example #1
0
            /// <summary>
            /// Initializes a new instance of the <see cref="QueuedCameraTask"/> class.
            /// </summary>
            /// <param name="task">The actual camera task object this class wraps.</param>
            public QueuedCameraTask(ICameraTask task)
            {
                this.Task           = task;
                this.taskWaitHandle = new ManualResetEventSlim(false);

                this.Task.Complete += this.TaskCompleted;
            }
Example #2
0
            /// <summary>
            /// Releases unmanaged and - optionally - managed resources.
            /// </summary>
            /// <param name="disposing">
            /// <see langword="true"/> to release both managed and unmanaged resources;
            /// <see langword="false"/> to release only unmanaged resources.
            /// </param>
            private void Dispose(bool disposing)
            {
                if (this.disposed)
                {
                    return;
                }

                // Mark this class as disposed early, so the method(s) relying on
                // the disposable objects (eg, taskWaitHandle) will know that
                // those objects are no longer valid.
                this.disposed = true;

                if (disposing)
                {
                    this.Task.Complete -= this.TaskCompleted;

                    if (this.taskWaitHandle != null)
                    {
                        // Set the event in case someone is waiting for it.
                        this.taskWaitHandle.Set();
                        this.taskWaitHandle.Dispose();
                        this.taskWaitHandle = null;
                    }

                    IDisposable disposableTask = this.Task as IDisposable;
                    if (disposableTask != null)
                    {
                        disposableTask.Dispose();
                    }

                    this.Task = null;
                }
            }
Example #3
0
        /// <summary>
        /// Synchronously adds the <paramref name="cameraTask"/> given to an execution queue
        /// and returns awaitable task to wait for the <paramref name="cameraTask"/> completion.
        /// </summary>
        /// <param name="cameraTask">Task to enqueue.</param>
        /// <returns>Awaitable task.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="cameraTask"/> is <see langword="null"/>.</exception>
        public Task EnqueueTaskAsync(ICameraTask cameraTask)
        {
            if (cameraTask == null)
            {
                throw new ArgumentNullException("cameraTask");
            }

            QueuedCameraTask task = this.AddTaskToQueue(cameraTask);

            return(Task.Run(() => task.WaitForComplete(Timeout.InfiniteTimeSpan)));
        }
        /// <summary>
        /// Synchronously adds the <paramref name="cameraTask"/> given to an execution queue
        /// and returns awaitable task to wait for the <paramref name="cameraTask"/> completion.
        /// </summary>
        /// <param name="cameraTask">Task to enqueue.</param>
        /// <returns>Awaitable task.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="cameraTask"/> is <see langword="null"/>.</exception>
        public Task EnqueueTaskAsync(ICameraTask cameraTask)
        {
            if (cameraTask == null)
            {
                throw new ArgumentNullException("cameraTask");
            }

            QueuedCameraTask task = this.AddTaskToQueue(cameraTask);

            return Task.Run(() => task.WaitForComplete(Timeout.InfiniteTimeSpan));
        }
Example #5
0
        /// <summary>
        /// Adds the <paramref name="cameraTask"/> specified to the execution queue.
        /// </summary>
        /// <param name="cameraTask">The camera task to add to the queue.</param>
        /// <returns>Execution wrapper for the <paramref name="cameraTask"/> given.</returns>
        private QueuedCameraTask AddTaskToQueue(ICameraTask cameraTask)
        {
            QueuedCameraTask queuedTask = new QueuedCameraTask(cameraTask);

            lock (this.syncRoot)
            {
                this.pendingTasks.Add(queuedTask);

                this.ScheduleNextTask();
            }

            return(queuedTask);
        }
            /// <summary>
            /// Releases unmanaged and - optionally - managed resources.
            /// </summary>
            /// <param name="disposing">
            /// <see langword="true"/> to release both managed and unmanaged resources;
            /// <see langword="false"/> to release only unmanaged resources.
            /// </param>
            private void Dispose(bool disposing)
            {
                if (this.disposed)
                {
                    return;
                }

                // Mark this class as disposed early, so the method(s) relying on
                // the disposable objects (eg, taskWaitHandle) will know that
                // those objects are no longer valid.
                this.disposed = true;

                if (disposing)
                {
                    this.Task.Complete -= this.TaskCompleted;

                    if (this.taskWaitHandle != null)
                    {
                        // Set the event in case someone is waiting for it.
                        this.taskWaitHandle.Set();
                        this.taskWaitHandle.Dispose();
                        this.taskWaitHandle = null;
                    }

                    IDisposable disposableTask = this.Task as IDisposable;
                    if (disposableTask != null)
                    {
                        disposableTask.Dispose();
                    }

                    this.Task = null;
                }
            }
            /// <summary>
            /// Initializes a new instance of the <see cref="QueuedCameraTask"/> class.
            /// </summary>
            /// <param name="task">The actual camera task object this class wraps.</param>
            public QueuedCameraTask(ICameraTask task)
            {
                this.Task           = task;
                this.taskWaitHandle = new ManualResetEventSlim(false);

                this.Task.Complete += this.TaskCompleted;
            }
        /// <summary>
        /// Adds the <paramref name="cameraTask"/> specified to the execution queue.
        /// </summary>
        /// <param name="cameraTask">The camera task to add to the queue.</param>
        /// <returns>Execution wrapper for the <paramref name="cameraTask"/> given.</returns>
        private QueuedCameraTask AddTaskToQueue(ICameraTask cameraTask)
        {
            QueuedCameraTask queuedTask = new QueuedCameraTask(cameraTask);

            lock (this.syncRoot)
            {
                this.pendingTasks.Add(queuedTask);

                this.ScheduleNextTask();
            }

            return queuedTask;
        }