Двойное выполнение oinitializedAsync и утилизировать в Mudblazor при отображении изображенийC#

Место общения программистов C#
Anonymous
Двойное выполнение oinitializedAsync и утилизировать в Mudblazor при отображении изображений

Сообщение Anonymous »

Я хочу построить веб -сайт, используя Mudblazor и C# на .net 9. На одной из страниц я хочу отображать изображения, которые загружаются в обработчике событий OnitializedAsync . Чтобы обрабатывать случай, когда пользователь покидает страницу, я реализовал метод Dispose .
Однако я заметил, что как onInitializedAsync , так и dispose дважды. /> Удалить выполнено.

onInitializeAsync выполнено.

dispected. /> Я уже пытался использовать _isInitialized , установленный на true , чтобы предотвратить вторую утилизацию, но распоряжение по -прежнему называется дважды. Подходит, потому что изображения перезагружаются слишком часто. < /p>
Я наткнулся на эту ветку. Я хотел реализовать ответы, содержащиеся там, но поток о Blazor в целом, и это из 2019 года. У меня нет _host.cshtml в проекте (так что мой вопрос не дублирует).@rendermode @(new InteractiveServerRenderMode(prerender:false))
< /code>
Это оказывает эффект, который второе распоряжение больше не называется при рендеринге, иначе только когда вы покидаете страницу. Тем не менее, данные извлекаются дважды. < /P>
Я использую приложение на стороне сервера. Шаблон при создании проекта - это один:
Изображение


}
}

}


@code {
private List Foos = new List();
protected override async Task OnInitializedAsync()
{
Foos = await LoadImages();
Console.WriteLine("OnInitializedAsync executed.");
}

public void Dispose()
{
Console.WriteLine("Dispose executed.");

foreach (Foo foo in Foos)
{
foo.CleanUp();
}
}

private Task LoadImages()
{
List foos = new List();

Foo foo1 = new Foo(System.IO.File.ReadAllBytes(@$"{Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)}\Pictures\20190119_131055 2.jpg"));
foos.Add(foo1);

Foo foo2 = new Foo(System.IO.File.ReadAllBytes(@$"{Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)}\Pictures\20210117_010401.jpg"));
foos.Add(foo2);

return Task.FromResult(foos);
}
}
< /code>
namespace BlazorMinimalExample2
{
public class Foo
{
public byte[]? ImageAsByteArray { get; set; }

public Foo(byte[] stuff)
{
this.ImageAsByteArray = stuff;
}

public void CleanUp()
{
if (this.ImageAsByteArray != null)
{
this.ImageAsByteArray = null;
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... displaying

Вернуться в «C#»