Завершение обновления формы отображения

This commit is contained in:
2025-05-05 14:34:56 +04:00
parent c704bc551b
commit 2c1756cef6
14 changed files with 450 additions and 430 deletions
@@ -0,0 +1,76 @@
using System.Collections.Concurrent;
using Pf2eModel;
using Pf2eModel.Model.Base;
using Pf2eModel.Model.Enum;
namespace Pf2eViewer.DatabaseViewer;
internal class DatabaseQueryPerformer
{
public required EntityType Type;
public required int Page;
public required int PerPage;
public required string Search = "";
private readonly Thread _queryThread;
public DatabaseQueryPerformer()
{
_queryThread = new(PerformQuery);
}
public void Query()
{
_queryThread.Start();
}
public void Abort()
{
_queryThread.Interrupt();
}
private void PerformQuery()
{
try
{
Pf2eDbContext dbContext = new();
IQueryable<Entity> query =
Search == ""
? dbContext.Entities.Where(e => e.Type == Type)
:
// ReSharper disable once EntityFramework.UnsupportedServerSideFunctionCall
dbContext.Entities.Where(e =>
e.Type == Type && Pf2eDbContext.LocaleSearch(e.Name, Search)
);
int count = query.Count();
List<Entity> entities = query.Skip((Page - 1) * PerPage).Take(PerPage).ToList();
DatabaseQueryResult result = new(count, entities);
OnQueryCompleted?.Invoke(this, result);
}
catch (ThreadInterruptedException)
{
// Ignore
}
}
public delegate void DatabaseQueryPerformerDelegate(
DatabaseQueryPerformer sender,
DatabaseQueryResult result
);
public event DatabaseQueryPerformerDelegate? OnQueryCompleted;
}
internal class DatabaseQueryResult(int count, ICollection<Entity> entities)
{
public int Count { get; } = count;
public ConcurrentBag<Entity> Entities { get; } = new(entities);
}