Skip to content

Commit c2581ba

Browse files
committed
修复取消手动查询时引发的异常
1 parent aa90c36 commit c2581ba

File tree

1 file changed

+19
-34
lines changed

1 file changed

+19
-34
lines changed

Firefly/ViewModels/CccfQueryViewModelBase.cs

Lines changed: 19 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ public abstract partial class CccfQueryViewModelBase : ObservableRecipient
3333

3434
protected CccfRequest? _lastCombinedRequest;
3535

36-
protected int _lastPageNumberBeforeCancel = 1;
36+
/// <summary>
37+
/// 记录查询发生异常前的页码。发生异常时,页码条将重置 <see cref="PageNumber"/>,导致期望的页面丢失。
38+
/// </summary>
39+
protected int _lastPageNumberBeforeError = 1;
3740

3841
protected bool _pageNumberChanged;
3942

@@ -212,7 +215,7 @@ public virtual async Task QueryAsync(CancellationToken cancellationToken = defau
212215
{
213216
try
214217
{
215-
_lastPageNumberBeforeCancel = PageNumber;
218+
_lastPageNumberBeforeError = PageNumber;
216219
HasError = false;
217220
QueryResultMessage = "";
218221

@@ -283,31 +286,17 @@ public virtual async Task RefreshAsync(CancellationToken cancellationToken)
283286
await _navigationService.NavigateAsync(async () => {
284287
SmartRequest.RejectChanges();
285288
CccfRequest.RejectChanges();
286-
287-
CccfQuerySession session;
288-
PageNumber = _lastPageNumberBeforeCancel;
289+
PageNumber = _lastPageNumberBeforeError;
289290

290291
try
291292
{
292293
await QueryCommand.ExecuteAsync(cancellationToken);
293294
}
294-
catch (TaskCanceledException)
295-
{
296-
session = new CccfQuerySession(
297-
_lastPageNumberBeforeCancel,
298-
SmartRequest,
299-
CombinedRequest,
300-
UseCombinedQuery,
301-
QueryResponse,
302-
HasError,
303-
"刷新请求被取消。",
304-
_scrolledVerticalOffset);
305-
306-
return session;
307-
}
295+
catch
296+
{ }
308297

309-
session = new CccfQuerySession(
310-
PageNumber,
298+
var session = new CccfQuerySession(
299+
_lastPageNumberBeforeError,
311300
SmartRequest,
312301
CombinedRequest,
313302
UseCombinedQuery,
@@ -382,8 +371,15 @@ await _navigationService.NavigateAsync(async () => {
382371
PageNumber = pageNumber;
383372
}
384373

374+
try
375+
{
376+
await QueryCommand.ExecuteAsync(cancellationToken);
377+
}
378+
catch
379+
{ }
380+
385381
var session = new CccfQuerySession(
386-
PageNumber,
382+
_lastPageNumberBeforeError,
387383
SmartRequest,
388384
CombinedRequest,
389385
UseCombinedQuery,
@@ -392,17 +388,6 @@ await _navigationService.NavigateAsync(async () => {
392388
QueryResultMessage,
393389
0d);
394390

395-
try
396-
{
397-
await QueryCommand.ExecuteAsync(cancellationToken);
398-
session.QueryResponse = QueryResponse;
399-
}
400-
catch (TaskCanceledException)
401-
{
402-
session.QueryResponse = null;
403-
session.QueryResultMessage = "查询请求被取消。";
404-
}
405-
406391
Messenger.Send(new ScrollBarOffsetMessage() {
407392
VerticalOffset = 0d
408393
}, "RestoreCccfQueryResultsScrollOffset");
@@ -447,7 +432,7 @@ protected virtual void NavigationService_Navigated(object? sender, NavigationEve
447432
if (e.NavigationMode is NavigationMode.Back or NavigationMode.Forward)
448433
{
449434
var cloned = e.Current.DeepClone();
450-
_lastPageNumberBeforeCancel = cloned.PageNumber;
435+
_lastPageNumberBeforeError = cloned.PageNumber;
451436
PageNumber = cloned.PageNumber;
452437
SmartRequest = cloned.SmartRequest;
453438

0 commit comments

Comments
 (0)