#asp.net-core #.net-core #blazor
#asp.net-core #.net-ядро #blazor
Вопрос:
Я новичок в разработке веб-интерфейса. Я столкнулся с ошибкой, которую было трудно понять по моим возможностям.
Система.TypeLoadException: ‘Не удалось загрузить тип ‘System.Windows.Size’ из сборки ‘WindowsBase, Version= 4.0.0.0, Culture=нейтральный, PublicKeyToken=31bf3856ad364e35′.’
Ситуация
Я внедряю индикатор выполнения, связанный с двумя видео, используя .net core 5.0 (давайте назовем два видео A и B соответственно.)
Когда время A обновляется, выполняется соответствующее событие (ontimeupdate), и текущее значение времени видео вводится в значение индикатора выполнения.
В то время я должен был выполнить StateHasChanged () для обновления индикатора выполнения (это означает, что функция StateHasChanged вызывается один раз в секунду)
Но после запуска видео, по истечении 5-10 секунд, возникает вышеуказанная ошибка. Поэтому я удалил StateHasChanged (), и он работает очень хорошо, однако индикатор выполнения не обновляется.
На странице есть одна таблица, четыре линейные диаграммы (chartjs.Blazor), два видео (Blazored.Видео).
Проблема, я думаю
- Это вызвано обновлением .net core 3.1 до 5.0?
- Проблема в том, что слишком много компонентов рисуется одновременно? (два видео, четыре диаграммы (нарисованные chartjs.Blazor))?
- Было бы проблемой, если бы StateHasChanged () периодически вызывался при наличии компонентов ‘chartjs’?
код
Я использую MatBlazor, Blazored.Видео, пакеты ChartJS.Blazor Nuget
-------- razor page --------
<BlazoredVideo PlayEvent="OnPlay" TimeUpdate="OnTimeUpdate"
VideoEventOptions="options"
class="w-100"
style="max-width:800px;"
controls="controls">
<source src="https://res.cloudinary.com/blazoredgitter/video/upload/v1557015491/samples/elephants.mp4" type="video/mp4" />
</BlazoredVideo>
<MatSlider Id="video_slider" @bind-Value="@currentVideoDuration" Discrete="true" Pin="true" TValue="int" ValueMin="0" ValueMax="100"></MatSlider>
<div class="row">
<div class="col-md-6">
<ChartJsLineChart @ref="_lineChartJs" Config="@lineConfig1" Width="600" Height="300" />
</div>
<div class="col-md-6">
<ChartJsLineChart @ref="_lineChartJs" Config="@lineConfig2" Width="600" Height="300" />
</div>
</div>
-------- cs code(code behind) --------
public LineConfig lineConfig1;
public LineConfig lineConfig2;
public ChartJsLineChart _lineChartJs;
Dictionary<VideoEvents, VideoStateOptions> options = new Dictionary<VideoEvents, VideoStateOptions>();
public int currentVideoDuration;
var option = new VideoStateOptions() { All = true };
protected override async Task OnInitializedAsync()
{
var option = new VideoStateOptions() { All = true };
options[VideoEvents.Pause] = option;
options[VideoEvents.Play] = option;
options[VideoEvents.Playing] = option;
options[VideoEvents.Progress] = option;
options[VideoEvents.TimeUpdate] = new VideoStateOptions() { CurrentTime = true };
currentVideoDuration = 0;
await base.OnInitializedAsync();
}
public void OnTimeUpdate(VideoState state)
{
currentVideoDuration = (int)state.CurrentTime;
StateHasChanged(); <-- caused error
}
//line chart configuration.. and set chart datas
Извините за плохой английский. Это слишком сложно решить для меня. Кто-нибудь, пожалуйста, помогите мне.
Редактировать
При использовании Blazored.В то же время я обнаружил, что это проблема, если периодически вызывается функция StateHasChanged.
Я протестировал его .net core 3.1, 5.0 с новым проектом, в котором я установил пакет только для необходимости, и я протестировал страницу, на которой есть только одно видео или только одна диаграмма (она работала хорошо)
Однако, хотя я и обнаружил проблему, я не смог решить ее своими силами. Я думаю, мне следует изменить один из двух пакетов или оба .. 🙁
Комментарии:
1. Не могли бы вы показать, где вы используете
Size
класс? Похоже, что вы импортируете DLL (WindowsBase, Version = 4.0.0.0), которая несовместима с Blazor. Вы вручную добавили WindowsBase в качестве ссылки в свой проект?2. @arconaut Спасибо за вашу заботу. Я никогда не использовал
Size
class (по крайней мере, насколько я знаю …). Я добавил все пакеты с помощью Nuget Manager. Я узнаю, есть ли какие-либо ссылки, добавленные вручную.3. Согласно видеодокументам MatBlazor и Blazored, я создал образец, используя asp.net версии core 3.1 и 5.0, кажется, что все они хорошо работают на моей стороне, не могу воспроизвести проблему, результат такой . Я искал какой-то ресурс, кажется, что эта проблема может быть связана с обновлением ОС или Visual Studio (VS), поэтому попробуйте восстановить VS и обновить OS и VS до последней версии.
4. @ZhiLv Вы тестировали ChartJS и Blazored video? Я также тестировал MatBlazor и Blazored video. Но, как я упоминал в «Редактировать», это происходит при использовании Blazored. Видео и диаграмма. JS вместе.
5. @takeyourcode, да, в моем примере я использую MatBlazor, Blazored . Видео и диаграмма. JS вместе, на одной странице. Все они работают хорошо, не встречает никаких проблем.