예제 #1
0
파일: Form1.cs 프로젝트: keji56/chord
        async Task Present()
        {
            PresentDialog dlg = new PresentDialog();

            dlg.UiState = _uiState;
            dlg.ShowDialog(this);
            _uiState = dlg.UiState;
            if (dlg.DialogResult == DialogResult.Cancel)
            {
                return;
            }

            int nStart = Convert.ToInt32(dlg.PresentStart);
            int nCount = Convert.ToInt32(dlg.PresentCount);

            EnableControls(false);  // 暂时禁用
            try
            {
                PresentResult present_result = await _zclient.Present(
                    dlg.ResultSetName,
                    nStart,
                    nCount,
                    1000,   // 10
                    "F",
                    _targetInfo.PreferredRecordSyntax);

                if (present_result.Value == -1)
                {
                    this.Invoke((Action)(() => MessageBox.Show(this, present_result.ToString())));
                }
                else
                {
                    // 把 MARC 记录显示出来
                    AppendMarcRecords(present_result.Records,
                                      _zclient.ForcedRecordsEncoding == null ? _targetInfo.DefaultRecordsEncoding : _zclient.ForcedRecordsEncoding,
                                      _fetched);
                    if (present_result.Records != null)
                    {
                        _fetched += present_result.Records.Count;
                    }
                }
            }
            finally
            {
                EnableControls(true);
            }
        }
예제 #2
0
파일: Form1.cs 프로젝트: keji56/chord
        async Task FetchRecords(TargetInfo targetinfo)
        {
            EnableControls(false);  // 暂时禁用
            try
            {
                if (_resultCount - _fetched > 0)
                {
                    PresentResult present_result = await _zclient.Present(
                        "default",
                        _fetched,
                        Math.Min((int)_resultCount - _fetched, 10),
                        10,
                        "F",
                        targetinfo.PreferredRecordSyntax);

                    if (present_result.Value == -1)
                    {
                        this.Invoke((Action)(() => MessageBox.Show(this, present_result.ToString())));
                    }
                    else
                    {
                        // 把 MARC 记录显示出来
                        AppendMarcRecords(present_result.Records,
                                          _zclient.ForcedRecordsEncoding == null ? targetinfo.DefaultRecordsEncoding : _zclient.ForcedRecordsEncoding,
                                          _fetched);
                        _fetched += present_result.Records.Count;
                    }
                }
            }
            finally
            {
                EnableControls(true);
            }

#if NO
            if (_resultCount - _fetched > 0)
            {
                this.button_nextBatch.Enabled = true;
            }
            else
            {
                this.button_nextBatch.Enabled = false;
            }

            this.button_nextBatch.Text = ">> " + _fetched + "/" + _resultCount;
#endif
        }
예제 #3
0
        // 获得记录
        // 确保一定可以获得nCount个
        // parameters:
        //		nStart	获取记录的开始位置(从0开始计数)
        //      nPreferedEachCount  推荐的每次条数。这涉及到响应的敏捷性。如果为-1或者0,表示最大
        public async Task <PresentResult> Present(
            string strResultSetName,
            int nStart,
            int nCount,
            int nPreferedEachCount,  // 推荐的每次条数。这涉及到响应的敏捷性
            string strElementSetName,
            string strPreferredRecordSyntax)
        {
            if (nCount == 0)
            {
                return new PresentResult {
                           Value = 0, ErrorInfo = "nCount 参数为 0,本次没有真正请求服务器获取记录"
                }
            }
            ;

            RecordCollection records = new RecordCollection();

            int nGeted = 0;

            for (; ;)
            {
                int nPerCount = 0;

                if (nPreferedEachCount == -1 || nPreferedEachCount == 0)
                {
                    nPerCount = nCount - nGeted;
                }
                else
                {
                    nPerCount = Math.Min(nPreferedEachCount, nCount - nGeted);
                }

                // this.Stop.SetMessage("正在获取命中结果 ( " + (nStart + nGeted + 1).ToString() + "-" + (nStart + nGeted + nPerCount).ToString() + " of " + this.ResultCount + " ) ...");

                // RecordCollection temprecords = null;
                PresentResult result = await OncePresent(
                    strResultSetName,
                    nStart + nGeted,
                    nPerCount,
                    strElementSetName,
                    strPreferredRecordSyntax);

                if (result.Value == -1)
                {
                    return(result);
                }
                if (result.Records == null)
                {
                    break;
                }


                nGeted += result.Records.Count;
                if (result.Records.Count > 0)
                {
                    records.AddRange(result.Records);
                }

                if (nGeted >= nCount || result.Records.Count == 0)
                {
                    break;
                }
            }

            return(new PresentResult {
                Records = records
            });
        }