I' Я пробовал все, что мог придумать, например IDisposible в LifetimeService, переход от List к OberservableCollection и т. д., а также очистку и перестройку моего проекта.
Я дважды проверил, что список элементов заполняется правильно. и это. Это работает, если я вручную обновлю страницу.
Буду очень признателен за любую помощь. Спасибо
Вот мой стол
table class="table">
Image
Name
Price
Link
ItemSlot
@foreach (var item in LifetimeService.Items)
{
@item.Name
@item.Price
Link
}
У меня есть класс LifetimeService, содержащий список элементов
public class LifetimeService
{
public int ScanAmounts = 0;
public List Items { get; set; } = new List();
public bool AddItem(Item item)
{
if (Items.Any(x => x.Name == item.Name && x.Price == item.Price && x.Image == item.Image && x.Link == item.Link))
{
return false;
}
if (ScanAmounts == 0)
{
Items.Add(item);
return true;
}
else
{
Items.Insert(0, item);
return true;
}
}
}
Мой метод работает по таймеру, который захватывает данные, а затем запускается
await InvokeAsync(StateHasChanged);
protected override async Task OnParametersSetAsync()
{
await base.OnParametersSetAsync();
if (LifetimeService.Items.Count > 0)
{
return;
}
StartTimer();
await ScrapeData();
}
private void StartTimer()
{
_timer = new Timer(async _ =>
{
await InvokeAsync(ScrapeData);
}, null, TimeSpan.Zero, TimeSpan.FromMinutes(1));
}
private async Task ScrapeData()
{
{
{
...
var added = LifetimeService.AddItem(new Item { Name = name, Price = price, Image = img, Link = link });
if (added)
{
addedAnythingToList = true;
Debug.WriteLine("Title: " + title);
Debug.WriteLine("Price: " + price);
Debug.WriteLine("Name: " + name);
Debug.WriteLine("Image: " + img);
}
}
if (addedAnythingToList)
{
Debug.WriteLine("Invoking state has changed");
await InvokeAsync(StateHasChanged);
Debug.WriteLine("Finished Invoking");
}
// Close the browser
}
catch (Exception ex)
{
Debug.WriteLine("Error: " + ex.Message);
Debug.WriteLine("Inner: " + ex.InnerException);
}
finally
{
// Ensure the driver quits even if an exception occurs
driver.Dispose();
driver.Quit();
Process[] processes = Process.GetProcessesByName("chromedriver");
foreach (Process process in processes)
{
process.Kill();
}
stopwatch.Stop();
Debug.WriteLine("Time taken: " + stopwatch.Elapsed);
await InvokeAsync(StateHasChanged);
LifetimeService.ScanAmounts++;
}
...
Подробнее здесь: https://stackoverflow.com/questions/786 ... haschanged
Мобильная версия