Exemple #1
0
 /// <summary>
 /// 添加进入操作已经执行完成的队列
 /// </summary>
 /// <param name="mOperator"></param>
 public void AddDoneOpeator(AsynOperator mOperator)
 {
     lock (mDoneOperatorLock)
     {
         this.mDoneOperators.Add(mOperator);
     }
 }
Exemple #2
0
 /// <summary>
 /// 添加进入操作还未执行队列
 /// </summary>
 /// <param name="mOperator"></param>
 public void AddOpeator(AsynOperator mOperator)
 {
     lock (mQueueOperatorLock)
     {
         this.mQueueOperators.Add(mOperator);
     }
 }
Exemple #3
0
    /// <summary>
    /// 异步操作
    /// </summary>
    protected void HandleDoneOperator()
    {
        foreach (AsynQueue mQueue in this.mAsynQueue)
        {
            int nCount = mQueue.DoneOperatorCount;
            for (int nIndex = 0; nIndex < nCount; ++nIndex)
            {
                AsynOperator mOperator = mQueue.PopDoneOperator();
                if (mOperator == null)
                {
                    continue;
                }

                // 结束
                try
                {
                    // 执行结束操作
                    mOperator.Finish();
                }
                catch (System.Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }

            mQueue.ExeQueueOperator = false;
        }
    }
Exemple #4
0
    /// <summary>
    /// 执行操作
    /// </summary>
    /// <param name="mOperator"></param>
    protected void ExecuteOperator(AsynOperator mOperator)
    {
        // 执行开始操作
        mOperator.Start();

        // 扔到任务队列中
        ThreadPool.QueueUserWorkItem(new WaitCallback(DoOperator), mOperator);
    }
Exemple #5
0
    /// <summary>
    /// 添加操作
    /// </summary>
    /// <param name="mOperator"></param>
    /// <param name="mAsynType"></param>
    public void AddOperator(AsynOperator mOperator, AsynType mAsynType = AsynType.AT_NoOrder)
    {
        mOperator.AsynType = mAsynType;
        if (mOperator.AsynType < AsynType.AT_NoOrder || mOperator.AsynType >= AsynType.AT_Max)
        {
            return;
        }

        this.mAsynQueue[(int)mOperator.AsynType].AddOpeator(mOperator);
    }
Exemple #6
0
    /// <summary>
    /// 返回一个队列
    /// </summary>
    /// <returns></returns>
    public AsynOperator PopOperator()
    {
        lock (mQueueOperatorLock)
        {
            if (this.mQueueOperators.Count <= 0)
            {
                return(null);
            }

            AsynOperator mOperator = this.mQueueOperators[0];
            this.mQueueOperators.RemoveAt(0);

            return(mOperator);
        }
    }
Exemple #7
0
    /// <summary>
    /// 执行操作
    /// </summary>
    /// <param name="mObj"></param>
    protected void DoOperator(object mObj)
    {
        if (!(mObj is AsynOperator))
        {
            return;
        }

        AsynOperator mOperator = (AsynOperator)mObj;

        if (mOperator == null)
        {
            return;
        }

        // 开始执行
        mOperator.Execute();

        // 添加到已经完成的队列中
        this.mAsynQueue[(int)mOperator.AsynType].AddDoneOpeator(mOperator);
    }
Exemple #8
0
    /// <summary>
    /// 执行操作
    /// </summary>
    protected void HandleOperator()
    {
        foreach (AsynQueue mQueue in this.mAsynQueue)
        {
            int nCount = mQueue.OperatorCount;
            for (int nIndex = 0; nIndex < nCount; ++nIndex)
            {
                // 只有没有队形的异步才能一次执行多个
                if (mQueue.ExeQueueOperator)
                {
                    if (!IsNoOrderQueue(mQueue.AsynType))
                    {
                        break;
                    }
                }

                AsynOperator mOperator = mQueue.PopOperator();
                if (mOperator == null)
                {
                    continue;
                }

                mQueue.ExeQueueOperator = true;

                // 结束
                try
                {
                    ExecuteOperator(mOperator);
                }
                catch (System.Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }
        }
    }