Example #1
0
        /// <summary>
        /// Excecutes threads on queue until none are left
        /// </summary>
        /// <param name="join">Wait for ThreadInstance to finish before re-joining with the main thread?</param>
        private void RunThreads(bool join = false)
        {
            if (ThreadQueue.Count() <= 0)
            {
                return;
            }

            ThreadInstance = new Thread(() =>
            {
                ThreadingEventArgs args = new ThreadingEventArgs();
                args.ThreadQueue        = ThreadQueue;
                OnThreadQueueStarted(args);

                while (ThreadQueue.Count > 0)
                {
                    RunThread();
                }

                OnThreadQueueFinished(null);
            });

            ThreadInstance.IsBackground = true;
            ThreadInstance.Start();
            if (join)
            {
                ThreadInstance.Join();
            }
        }
Example #2
0
        /// <summary>
        /// Excecutes threads on queue until none are left
        /// </summary>
        private void ExcecuteQueue()
        {
            if (ThreadQueue.Count() <= 0)
            {
                return;
            }

            ThreadInstance = new Thread(() =>
            {
                ThreadingEventArgs args = new ThreadingEventArgs();
                args.ThreadQueue        = ThreadQueue;
                OnThreadQueueStarted(args);

                while (ThreadQueue.Count > 0)
                {
                    ThreadQueue.Peek().IsBackground = true;
                    ThreadQueue.Peek().Start();
                    ThreadQueue.Peek().Join();

                    ThreadingEventArgs removeArgs = new ThreadingEventArgs();
                    args.Thread = ThreadQueue.Peek();

                    ThreadQueue.Dequeue();
                    ItemRemovedFromThreadQueue(args);
                }

                OnThreadQueueFinished(null);
            });

            ThreadInstance.IsBackground = true;
            ThreadInstance.Start();
        }
Example #3
0
        /// <summary>
        /// Event fired when an item is removed from ThreadQueue
        /// </summary>
        /// <param name="e">The thread that was removed from queue is passed as arg</param>
        public void ItemRemovedFromThreadQueue(ThreadingEventArgs e)
        {
            EventHandler <ThreadingEventArgs> handler = ThreadQueueItemRemoved;

            if (handler != null)
            {
                handler(this, e);
            }
        }
Example #4
0
        /// <summary>
        /// Event fired when an item is added to the ThreadQueue
        /// </summary>
        /// <param name="e">The thread that was added to the queue is passed as an arg</param>
        public void ItemAddedToThreadQueue(ThreadingEventArgs e)
        {
            EventHandler <ThreadingEventArgs> handler = ThreadQueueItemAdded;

            if (handler != null)
            {
                handler(this, e);
            }
        }
Example #5
0
        /// <summary>
        /// Event fired when ThreadQueue finished executing all threads
        /// </summary>
        /// <param name="e">Can be null</param>
        public void OnThreadQueueFinished(ThreadingEventArgs e)
        {
            EventHandler <ThreadingEventArgs> handler = ThreadQueueFinished;

            if (handler != null)
            {
                handler(this, e);
            }
        }
Example #6
0
        /*public static void AddToQueue(Func func)
         * {
         *  AddToQueue(new Thread(() => func()));
         * }*/

        /// <summary>
        /// Add a thread to the ThreadQueue. It will execute the thread immediately if the thread Instance for this class isn't running
        /// </summary>
        /// <param name="thread">Thread to be added to the ThreadQueue</param>
        public static void AddToQueue(Thread thread)
        {
            if (ThreadQueue == null)
            {
                ThreadQueue = new Queue <Thread>();
            }

            ThreadQueue.Enqueue(thread);

            ThreadingEventArgs args = new ThreadingEventArgs();

            args.Thread = thread;
            Instance.ItemAddedToThreadQueue(args);

            if (!IsThreadRunning())
            {
                Instance.ExcecuteQueue();
            }
        }
Example #7
0
        /// <summary>
        /// Add a thread to the ThreadQueue. It will execute the thread immediately if the thread Instance for this class isn't running
        /// </summary>
        /// <param name="thread">Thread to be added to the ThreadQueue</param>
        public static void AddToQueue(Thread thread, ApartmentState threadType = ApartmentState.Unknown, bool join = false)
        {
            if (ThreadQueue == null)
            {
                ThreadQueue = new Queue <Thread>();
            }

            thread.SetApartmentState(threadType);
            ThreadQueue.Enqueue(thread);

            ThreadingEventArgs args = new ThreadingEventArgs();

            args.Thread = thread;
            Instance.ItemAddedToThreadQueue(args);

            if (!IsThreadRunning())
            {
                Instance.ExecuteQueue(join);
            }
        }
Example #8
0
        /// <summary>
        /// Run the first thread in the ThreadQueue
        /// </summary>
        private void RunThread(bool nullifyThreadInst = false)
        {
            ThreadQueue.Peek().IsBackground = true;
            ThreadQueue.Peek().Start();
            runningThreads++;

            if (runningThreads >= 3)
            {
                ThreadQueue.Peek().Join();
                runningThreads--;
            }

            ThreadingEventArgs removeArgs = new ThreadingEventArgs();

            removeArgs.Thread = ThreadQueue.Peek();

            ThreadQueue.Dequeue();

            ItemRemovedFromThreadQueue(removeArgs);
        }