コード例 #1
0
ファイル: Compare.cs プロジェクト: ewin66/Beinet.cn.Tools
        // 主调程序
        void DoCompare(object state)
        {
            // 统计总对比耗时用
            var begin = DateTime.Now;

            // 数组第0个元素用于统计任务个数,在后面进行阻塞
            // 数组第1个元素用于统计出错的行数
            int[] taskCnt = { 0, 0 };
            try
            {
                // 启动工作线程,去处理所有url
                int threadNum;
                if (!int.TryParse(txtThreadNum.Text, out threadNum))
                {
                    MessageBox.Show("请正确输入检查线程数");
                    return;
                }
                _scheduler.StartWork(threadNum);

                string compareIp = txtCompareIp.Text;

                string fileDir = Path.Combine(Utility.StartPath, "WebCompare\\" + DateTime.Now.ToString("yyyyMMddHHmmssfff"));

                object globalRegs = lnkReg.Tag;

                int idx    = 0;
                int rowCnt = lvUrls.RowCount - 1; // 不处理未提交的行(即空白行)
                if (state != null)
                {
                    int rowIdx = (int)state;
                    if (rowIdx < 0 || rowIdx >= rowCnt)
                    {
                        return;
                    }
                    DataGridViewRow row = lvUrls.Rows[(int)state];
                    CompareRow(row, rowIdx + 1, compareIp, fileDir, globalRegs, taskCnt);
                }
                else
                {
                    foreach (DataGridViewRow row in lvUrls.Rows)
                    {
                        if (row.Index >= rowCnt)
                        {
                            break;
                        }

                        idx++;
                        CompareRow(row, idx, compareIp, fileDir, globalRegs, taskCnt);
                    }
                }
            }
            catch (Exception exp)
            {
                string errMsg = string.Format("对比时出错,循环中止:\r\n{0}", exp);
                ShowCompareErr("", errMsg);
            }
            finally
            {
                // 等待所有线程完成
                //while (_scheduler.QueueLength > 0)
                while (taskCnt[0] > 0)
                {
                    Thread.Sleep(100);
                }
                _scheduler.StopWork();
                SetReadOnly(false);

                string timeMsg = string.Format("全部对比完成,耗时:{0}秒,累计 {1} 个Url对比存在差异",
                                               (DateTime.Now - begin).TotalSeconds.ToString("N2"),
                                               taskCnt[1].ToString());
                ShowCompareErr("", timeMsg);
            }
        }