.NET中中STAThread的使用详解的使用详解
个STA线程模型,在线程内加入了讯息帮浦等等机制,减少开发人员撰写窗口程序的工作量
在WindowForm应用程序中主要的线程,是采用一种称为「Single-Threaded Apartment(STA)」的线程模型。这个STA线程模
型,在线程内加入了讯息帮浦等等机制,减少开发人员撰写窗口程序的工作量。
而在开发类别库的时候,如果要使用类似的STA线程模型,可以使用下列的程序代码提供的类别来完成。
复制代码 代码如下:
namespace CLK.Threading
{
public class STAThread
{
// Enum
private enum ThreadState
{
Started,
Stopping,
Stopped,
}
// Fields
private readonly object _syncRoot = new object();
private readonly BlockingQueue<Action> _actionQueue = null;
private Thread _thread = null;
private ManualResetEvent _threadEvent = null;
private ThreadState _threadState = ThreadState.Stopped;
// Constructor
public STAThread()
{
// ActionQueue
_actionQueue = new BlockingQueue<Action>();
// ThreadEvent
_threadEvent = new ManualResetEvent(true);
// ThreadState
_threadState = ThreadState.Stopped;
}
// Methods
public void Start()
{
// Sync
lock (_syncRoot)
{
// ThreadState
if (_threadState != ThreadState.Stopped) throw new InvalidOperationException();
_threadState = ThreadState.Started;
}
// Thread
_thread = new Thread(this.Operate);
_thread.Name = string.Format("Class:{0}, Id:{1}", "STAThread", _thread.ManagedThreadId);
_thread.IsBackground = false;
_thread.Start();
}