public ValidatePDFParameter GetValidatePDFParameter()
        {
            ValidatePDFParameter rtn = new ValidatePDFParameter();

            //Outputpath is the checking 's original path.
            rtn.SetPDFCheckingDir(this.txtPDFCheckDir.Text.Trim());
            rtn.SetVeraPDFPath(this.txtVerpadExcutePath.Text.Trim());
            rtn.SetResultFilePath(this.txtVeraPDFResultFile.Text.Trim());
            rtn.SetIsContainsSubFold(this.ckbPDFCheckSubFold.Checked);
            rtn.SetCheckIDNM(this.txtCheckIDNM.Text.Trim());
            return(rtn);
        }
 public ValidatePDF(CancellationTokenSource _tokenSource, ICloneable _threadParameter) : base(_tokenSource, _threadParameter)
 {
     if (this.ThreadParameter != null)
     {
         param = (ValidatePDFParameter)this.ThreadParameter;
     }
     IsDBConnectionAvailable = SystemConfiguration.GetValue("PDFValidating").Trim().ToLower() == "Database".ToLower()?true:false;
     if (IsDBConnectionAvailable)
     {
         InitCheckId();
     }
     //amount = 0;
 }
        /// <summary>
        /// recursive  call by self
        /// </summary>
        /// <returns></returns>
        public override T RunSubThread(ICloneable thparam)
        {
            //judage if threading is cancelled.
            this.IsTaskCanceled();
            ValidatePDFParameter param;

            if (thparam != null)
            {
                param = (ValidatePDFParameter)thparam;
            }
            else
            {
                return(default(T));
            }
            DirectoryInfo originalFold = new DirectoryInfo(param.PDFCheckingDir);

            FileInfo[] OriginalFileList = originalFold.GetFiles("*.pdf");
            foreach (var file in OriginalFileList)
            {
                //successamount++;
                //SuccessRecorder.Record(FormatHistory(successamount, file.DirectoryName,file.Name, file.Extension));
                FormatLog(file, (Valid + Invalid + 1));
                Files dbfile = new Files();
                if (!IsNewCheck)
                {
                    try
                    {
                        dbfile = filebll.GetFileByFullName(this.CheckID, file.FullName, this.ctx);
                        if (dbfile.IsValid)
                        {
                            PrintIsValid(dbfile.IsValid);
                            if (dbfile.IsValid)
                            {
                                Valid++;
                            }
                            else
                            {
                                Invalid++;
                            }
                            continue;
                        }
                    }
                    catch
                    {
                    }
                }

                using (Process pr = new Process())
                {
                    //声明一个进程类对象
                    pr.StartInfo.FileName        = "\"" + param.VeraPDFPath + "\"";
                    pr.StartInfo.Arguments       = " --format mrr \"" + file.FullName + "\" >\"" + param.ResultFilePath + "\"";
                    pr.StartInfo.UseShellExecute = false;
                    pr.StartInfo.CreateNoWindow  = true;
                    pr.Start();
                    pr.WaitForExit();
                }
                bool isValid = VeraPDFResultAnalysis.ValidatePDF(param.ResultFilePath);
                PrintIsValid(isValid);
                if (isValid)
                {
                    Valid++;
                }
                else
                {
                    Invalid++;
                }
                //record result in db
                if (IsDBConnectionAvailable)
                {
                    SaveCheckResultToDB(file, isValid);
                }
                else
                {
                    // record to a file instead of db
                }
            }
            //if (IsDBConnectionAvailable)
            //{
            //    if(OriginalFileList.Length > 0) {
            //        bool rtn = filebll.SaveChange(this.ctx);
            //        if (!rtn)
            //        {
            //            this.SetDBConnectionUnvailable();
            //        }
            //    }
            //}
            //update check 's total, valid,invalid
            UpdateTotal(Valid, Invalid);

            //recursive Sub Directory
            if (param.IsContainsSubFold)
            {
                foreach (DirectoryInfo dir in originalFold.GetDirectories())
                {
                    ValidatePDFParameter paramSub = (ValidatePDFParameter)param.Clone();
                    paramSub.SetPDFCheckingDir(dir.FullName);
                    RunSubThread(paramSub);
                }
            }


            return(default(T));
        }