using System; using System.Threading; namespace Amib.Threading { /// /// Summary description for STPStartInfo. /// public class STPStartInfo : WIGStartInfo { private int _idleTimeout = SmartThreadPool.DefaultIdleTimeout; private int _minWorkerThreads = SmartThreadPool.DefaultMinWorkerThreads; private int _maxWorkerThreads = SmartThreadPool.DefaultMaxWorkerThreads; private ThreadPriority _threadPriority = SmartThreadPool.DefaultThreadPriority; private bool _areThreadsBackground = SmartThreadPool.DefaultAreThreadsBackground; private string _threadPoolName = SmartThreadPool.DefaultThreadPoolName; private int? _maxStackSize = SmartThreadPool.DefaultMaxStackSize; private bool _supressflow = false; public STPStartInfo() { _threadPriority = SmartThreadPool.DefaultThreadPriority; _maxWorkerThreads = SmartThreadPool.DefaultMaxWorkerThreads; _idleTimeout = SmartThreadPool.DefaultIdleTimeout; _minWorkerThreads = SmartThreadPool.DefaultMinWorkerThreads; } public STPStartInfo(STPStartInfo stpStartInfo) : base(stpStartInfo) { _idleTimeout = stpStartInfo.IdleTimeout; _minWorkerThreads = stpStartInfo.MinWorkerThreads; _maxWorkerThreads = stpStartInfo.MaxWorkerThreads; _threadPriority = stpStartInfo.ThreadPriority; _threadPoolName = stpStartInfo._threadPoolName; _areThreadsBackground = stpStartInfo.AreThreadsBackground; _apartmentState = stpStartInfo._apartmentState; _supressflow = stpStartInfo._supressflow; } /// /// Get/Set the idle timeout in milliseconds. /// If a thread is idle (starved) longer than IdleTimeout then it may quit. /// public virtual int IdleTimeout { get { return _idleTimeout; } set { ThrowIfReadOnly(); _idleTimeout = value; } } /// /// Get/Set the lower limit of threads in the pool. /// public virtual int MinWorkerThreads { get { return _minWorkerThreads; } set { ThrowIfReadOnly(); _minWorkerThreads = value; } } /// /// Get/Set the upper limit of threads in the pool. /// public virtual int MaxWorkerThreads { get { return _maxWorkerThreads; } set { ThrowIfReadOnly(); _maxWorkerThreads = value; } } /// /// Get/Set the scheduling priority of the threads in the pool. /// The Os handles the scheduling. /// public virtual ThreadPriority ThreadPriority { get { return _threadPriority; } set { ThrowIfReadOnly(); _threadPriority = value; } } /// /// Get/Set the thread pool name. Threads will get names depending on this. /// public virtual string ThreadPoolName { get { return _threadPoolName; } set { ThrowIfReadOnly(); _threadPoolName = value; } } /// /// Get/Set backgroundness of thread in thread pool. /// public virtual bool AreThreadsBackground { get { return _areThreadsBackground; } set { ThrowIfReadOnly(); _areThreadsBackground = value; } } /// /// Get a readonly version of this STPStartInfo. /// /// Returns a readonly reference to this STPStartInfo public new STPStartInfo AsReadOnly() { return new STPStartInfo(this) { _readOnly = true }; } private ApartmentState _apartmentState = SmartThreadPool.DefaultApartmentState; /// /// Get/Set the apartment state of threads in the thread pool /// public ApartmentState ApartmentState { get { return _apartmentState; } set { ThrowIfReadOnly(); _apartmentState = value; } } /// /// Get/Set the max stack size of threads in the thread pool /// public int? MaxStackSize { get { return _maxStackSize; } set { ThrowIfReadOnly(); if (value.HasValue && value.Value < 0) { throw new ArgumentOutOfRangeException("value", "Value must be greater than 0."); } _maxStackSize = value; } } public bool SuppressFlow { get { return _supressflow; } set { ThrowIfReadOnly(); _supressflow = value; } } } }