private void PaperHandler_ReportFinished(object sender, PaperInfoFinishArgs e)
        {
            try
            {
                //one finished
                if (e.Error != null)
                {
                    //异常出错
                    lock (m_ErrorNumLock) { ErrorNum++; }
                    SLogger.Instance.Writer(SLogLevel.Error, e.Error.Code + e.Error.Msg);
                    return;
                }
                UserPaperDto u     = e.UPaper;
                string       uName = u.UserName;

                lock (m_HandledNumLock)
                {
                    //执行的成功次数
                    HandledNum++;
                }
                PaperInfoFinishArgs arg = new PaperInfoFinishArgs()
                {
                    UPaper = u
                };
                OnRaiseReporting(arg);

                //to remove
                if (m_HandlerDic.ContainsKey(uName))
                {
                    m_HandlerDic.Remove(uName);
                }
            }
            catch (Exception ex)
            {
                SLogger.Instance.Writer(SLogLevel.Error, e.Error.Code + e.Error.Msg);
            }
            finally
            {
                //todo next 轮询
                RunOneTask();
                lock (m_FinishLock)
                {
                    if (IsCompleted && !m_OneFinished)
                    {
                        m_OneFinished = true;
                        m_State       = JobState.End;
                        //finished
                        Console.WriteLine("All Finished!");
                        OnRaiseFinished(new EventArgs());
                    }
                }
            }
        }
 private void Run(UserPaperDto d)
 {
     try
     {
         //todo report event
         PaperHandler paperHandler = new PaperHandler();
         paperHandler.Reporting      += PaperHandler_Reporting;
         paperHandler.ReportFinished += PaperHandler_ReportFinished;
         paperHandler.UserPaper       = d;
         paperHandler.MonitorUserName = m_CurUserName;
         paperHandler.AddTasks(d.PaperInfo);
         m_HandlerDic.Add(d.UserName, paperHandler);
     }
     catch (Exception ex)
     {
         SLogger.Instance.Writer(SLogLevel.Error, ex.Message);
     }
     finally
     {
     }
 }