/// <summary> /// 阻塞启动 /// </summary> /// <param name="ThreadFunc"></param> /// <param name="data"></param> /// <returns></returns> public bool ThreadStartWait(EventFunc2 ThreadFunc, int iMillisecondsTimeout = 0, params object[] data) { //等待 bool bFlag; if (iMillisecondsTimeout > 0) { bFlag = m_ThreadSem.WaitOne(iMillisecondsTimeout); } else { bFlag = m_ThreadSem.WaitOne(); } //获取空闲的线程序号 int iIndex = GetFreeIndex(); //为了保险起见,如果没有获得,则在此循环3次 int iRetryCount = 3; while (iIndex < 0 && iRetryCount-- > 0) { Thread.Sleep(100); iIndex = GetFreeIndex(); } //如果没有获取到则返回失败 if (iIndex < 0) { return(false); } //启动线程 m_ThreadArrary[iIndex] = Start(ThreadFuncWait, ThreadFunc, data); return(true); }