Пример #1
0
        private void Dispose(bool disposing)
        {
            --count;

            if (Thread.CurrentThread.ManagedThreadId != this.currentThread.ManagedThreadId)
            {
                throw new InvalidOperationException("Dispose() was called on a thread other than the one that this object was created on");
            }

            if (count == 0)
            {
                if ((activeFlags & ThreadBackgroundFlags.Cpu) == ThreadBackgroundFlags.Cpu)
                {
                    this.currentThread.Priority = this.oldThreadPriority;
                    activeFlags &= ~ThreadBackgroundFlags.Cpu;
                }

                if (Environment.OSVersion.Version >= OS.WindowsVista &&
                    (activeFlags & ThreadBackgroundFlags.IO) == ThreadBackgroundFlags.IO)
                {
                    IntPtr hThread = SafeNativeMethods.GetCurrentThread();
                    bool   bResult = SafeNativeMethods.SetThreadPriority(hThread, NativeConstants.THREAD_MODE_BACKGROUND_END);

                    if (!bResult)
                    {
                        NativeMethods.ThrowOnWin32Error("SetThreadPriority(THREAD_MODE_BACKGROUND_END) returned FALSE");
                    }

                    activeFlags &= ~ThreadBackgroundFlags.IO;
                }
            }
        }
Пример #2
0
        public ThreadBackground(ThreadBackgroundFlags flags)
        {
            this.flags = flags;
            this.currentThread = Thread.CurrentThread;
            this.oldThreadPriority = this.currentThread.Priority;

            if ((flags & ThreadBackgroundFlags.Cpu) == ThreadBackgroundFlags.Cpu &&
                (activeFlags & ThreadBackgroundFlags.Cpu) != ThreadBackgroundFlags.Cpu)
            {
                this.currentThread.Priority = ThreadPriority.BelowNormal;
                activeFlags |= ThreadBackgroundFlags.Cpu;
            }

            if (Environment.OSVersion.Version >= OS.WindowsVista &&
                (flags & ThreadBackgroundFlags.IO) == ThreadBackgroundFlags.IO &&
                (activeFlags & ThreadBackgroundFlags.IO) != ThreadBackgroundFlags.IO)
            {
                IntPtr hThread = SafeNativeMethods.GetCurrentThread();
                bool bResult = SafeNativeMethods.SetThreadPriority(hThread, NativeConstants.THREAD_MODE_BACKGROUND_BEGIN);

                if (!bResult)
                {
                    NativeMethods.ThrowOnWin32Error("SetThreadPriority(THREAD_MODE_BACKGROUND_BEGIN) returned FALSE");
                }
            }

            activeFlags |= flags;

            ++count;
        }
Пример #3
0
        public ThreadBackground(ThreadBackgroundFlags flags)
        {
            this.flags             = flags;
            this.currentThread     = Thread.CurrentThread;
            this.oldThreadPriority = this.currentThread.Priority;

            if ((flags & ThreadBackgroundFlags.Cpu) == ThreadBackgroundFlags.Cpu &&
                (activeFlags & ThreadBackgroundFlags.Cpu) != ThreadBackgroundFlags.Cpu)
            {
                this.currentThread.Priority = ThreadPriority.BelowNormal;
                activeFlags |= ThreadBackgroundFlags.Cpu;
            }

            if (Environment.OSVersion.Version >= OS.WindowsVista &&
                (flags & ThreadBackgroundFlags.IO) == ThreadBackgroundFlags.IO &&
                (activeFlags & ThreadBackgroundFlags.IO) != ThreadBackgroundFlags.IO)
            {
                IntPtr hThread = SafeNativeMethods.GetCurrentThread();
                bool   bResult = SafeNativeMethods.SetThreadPriority(hThread, NativeConstants.THREAD_MODE_BACKGROUND_BEGIN);

                if (!bResult)
                {
                    NativeMethods.ThrowOnWin32Error("SetThreadPriority(THREAD_MODE_BACKGROUND_BEGIN) returned FALSE");
                }
            }

            activeFlags |= flags;

            ++count;
        }
Пример #4
0
        public ThreadBackground(ThreadBackgroundFlags flags)
        {
            this.flags             = flags;
            this.currentThread     = Thread.CurrentThread;
            this.oldThreadPriority = this.currentThread.Priority;

            if ((flags & ThreadBackgroundFlags.Cpu) == ThreadBackgroundFlags.Cpu &&
                (activeFlags & ThreadBackgroundFlags.Cpu) != ThreadBackgroundFlags.Cpu)
            {
                this.currentThread.Priority = ThreadPriority.BelowNormal;
                activeFlags |= ThreadBackgroundFlags.Cpu;
            }

            activeFlags |= flags;

            ++count;
        }
Пример #5
0
        public ThreadBackground(ThreadBackgroundFlags flags)
        {
            this.flags = flags;
            this.currentThread = Thread.CurrentThread;
            this.oldThreadPriority = this.currentThread.Priority;

            if ((flags & ThreadBackgroundFlags.Cpu) == ThreadBackgroundFlags.Cpu &&
                (activeFlags & ThreadBackgroundFlags.Cpu) != ThreadBackgroundFlags.Cpu)
            {
                this.currentThread.Priority = ThreadPriority.BelowNormal;
                activeFlags |= ThreadBackgroundFlags.Cpu;
            }

            activeFlags |= flags;

            ++count;
        }
Пример #6
0
        private void Dispose(bool disposing)
        {
            --count;

            if (Thread.CurrentThread.ManagedThreadId != this.currentThread.ManagedThreadId)
            {
                throw new InvalidOperationException("Dispose() was called on a thread other than the one that this object was created on");
            }

            if (count == 0)
            {
                if ((activeFlags & ThreadBackgroundFlags.Cpu) == ThreadBackgroundFlags.Cpu)
                {
                    this.currentThread.Priority = this.oldThreadPriority;
                    activeFlags &= ~ThreadBackgroundFlags.Cpu;
                }
            }
        }
Пример #7
0
        private void Dispose(bool disposing)
        {
            --count;

            if (Thread.CurrentThread.ManagedThreadId != this.currentThread.ManagedThreadId)
            {
                throw new InvalidOperationException("Dispose() was called on a thread other than the one that this object was created on");
            }

            if (count == 0)
            {
                if ((activeFlags & ThreadBackgroundFlags.Cpu) == ThreadBackgroundFlags.Cpu)
                {
                    this.currentThread.Priority = this.oldThreadPriority;
                    activeFlags &= ~ThreadBackgroundFlags.Cpu;
                }

                if (Environment.OSVersion.Version >= OS.WindowsVista &&
                    (activeFlags & ThreadBackgroundFlags.IO) == ThreadBackgroundFlags.IO)
                {
                    IntPtr hThread = SafeNativeMethods.GetCurrentThread();
                    bool bResult = SafeNativeMethods.SetThreadPriority(hThread, NativeConstants.THREAD_MODE_BACKGROUND_END);

                    if (!bResult)
                    {
                        NativeMethods.ThrowOnWin32Error("SetThreadPriority(THREAD_MODE_BACKGROUND_END) returned FALSE");
                    }

                    activeFlags &= ~ThreadBackgroundFlags.IO;
                }
            }
        }
Пример #8
0
        private void Dispose(bool disposing)
        {
            --count;

            if (Thread.CurrentThread.ManagedThreadId != this.currentThread.ManagedThreadId)
            {
                throw new InvalidOperationException("Dispose() was called on a thread other than the one that this object was created on");
            }

            if (count == 0)
            {
                if ((activeFlags & ThreadBackgroundFlags.Cpu) == ThreadBackgroundFlags.Cpu)
                {
                    this.currentThread.Priority = this.oldThreadPriority;
                    activeFlags &= ~ThreadBackgroundFlags.Cpu;
                }
            }
        }