你好堆栈溢出,
我在缓慢加载页面方面遇到困难。我发现在Firefox的调试控制台中有一个错误No .NET call dispatcher has been set.
,但是在Chrome浏览器中,我看到了一个更具体的错误:Error: System.NullReferenceException: Object reference not set to an instance of an object. at StudyMate.Client.Services.BrowserResizeService.OnBrowserResize ()
。
这里是my website。 如果在加载时打开浏览器控制台,有时您会自己看到这些错误,我发现它的再现性很强。请注意,第一次加载该页面要花一两分钟的时间,但是(假设您不清除浏览器缓存)在下次访问时页面加载会更快。
我的调整大小服务已注册为作用域,然后将其注入需要它的剃须刀页面中。在创建或销毁该剃刀页面/组件时,每个页面都有一个订户和处理方法。
这是C#浏览器调整大小服务文件,我遇到了问题,请注意,在剃须刀页面中,当事件发生时,我称为“获取尺寸”。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.JSInterop;
using StudyMate.Models.Models;
namespace StudyMate.Client.Services
{
public class BrowserResizeService
{
private readonly IJSRuntime _JSRuntime;
public event Func<Task> OnResize;
private static BrowserResizeService _instance = null;
public BrowserResizeService(IJSRuntime js)
{
_JSRuntime = js;
_instance = this;
}
[JSInvokable]
public static async Task OnBrowserResize()
{
await _instance?.OnResize?.Invoke();
}
public async Task<BrowserDimension> GetDimensions()
{
try
{
return await _JSRuntime.InvokeAsync<BrowserDimension>("getDimensions");
}
catch(Exception ex)
{
Console.WriteLine(ex);
return new BrowserDimension { Height = 800, Width = 1000 };
}
}
}
}
以下是订阅该事件的剃须刀页面的示例:
@page "/ManageChosenSubjects"
@inject StudentService studentService
@inject SubjectService subjectService
@inject UserService userService
@inject AuthenticationStateProvider AuthenticationStateProvider
@inject BrowserResizeService ResizeService
...
@code
{
public int Height { get; set; }
public int Width { get; set; }
...
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
ResizeService.OnResize += OnResize;
}
}
private async Task OnResize()
{
await GetDimensions();
}
async Task GetDimensions()
{
var dimension = await ResizeService.GetDimensions();
Height = dimension.Height - 220;
Width = dimension.Width - 400;
Console.WriteLine($"H: {Height}, W: {Width}");
this.StateHasChanged();
}
public void Dispose()
{
ResizeService.OnResize -= OnResize;
}
}
编辑:缩小C#服务文件的“对象引用未设置为对象实例”的问题。还是很困惑