【发布时间】:2020-02-27 08:36:47
【问题描述】:
我在 Blazor 中使用事件将数据从一个局部视图传递到另一个视图。
问题:dispose 不起作用,每次页面销毁并重新呈现时,它都会附加相同的事件。当我调用事件时,它会调用多次(部分视图销毁和重新创建的时间)
带有调用方法的事件定义代码
public event Action<long,long,bool,bool> MyEvent;
public void InVokeMyEvent(long data1,
bool data2,long data3,bool data4) {
MyEvent?.Invoke(data1,data2,data3, data4);
}
函数定义
async Task MyFunction(long data1,
long data2,
bool data3,
bool data4)
{}
我在 OnInitializedAsync 函数中注册事件如下。
protected override async Task OnInitializedAsync()
{
RGEState.MyEvent+= async (long data1,
long data2,
bool data3,
bool data4) =>
await MyFunction(data1,
data2,
data3,
data4);
await base.OnInitializedAsync();
}
现在要分离事件,我在实现 IDisposable 后在页面中执行以下代码。
public void Dispose()
{
RGEState.MyEvent -= async (long data1,
long data2,
bool data3,
bool data4) =>
await MyFunction(data1,
data2,
data3,
data4);
}
【问题讨论】:
-
我知道这看起来很傻,但是您的组件是否通过
@implements指令实现了IDisposable? -
是的,我已经通过@Implements 指令实现了IDisposable。
-
您的事件有什么异步的原因吗?一般来说,不能等待事件。
-
这个方法调用数据库来获取一些数据。我想在数据库调用发生时显示进程指示器(加载器),所以我将此方法设为异步,并通过使用带有 StateHasChanged 方法的布尔变量 true/false,我可以轻松地显示隐藏加载器。
标签: blazor blazor-server-side asp.net-blazor