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); } }
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 }
// 获得记录 // 确保一定可以获得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 }); }