在HostedService中引发事件并在Blazor组件中使用它的方法如下:
public class MyHostedService : BackgroundService
{
public event EventHandler<MyEventArgs> MyEvent;
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
// 执行后台任务逻辑
// 触发事件
OnMyEvent(new MyEventArgs("Event data"));
await Task.Delay(1000, stoppingToken);
}
}
protected virtual void OnMyEvent(MyEventArgs e)
{
MyEvent?.Invoke(this, e);
}
}
public class MyEventArgs : EventArgs
{
public string Data { get; }
public MyEventArgs(string data)
{
Data = data;
}
}
@page "/mycomponent"
@inject MyHostedService MyService
<h3>My Component</h3>
<p>Event data: @eventData</p>
@code {
private string eventData;
protected override void OnInitialized()
{
MyService.MyEvent += HandleMyEvent;
}
private void HandleMyEvent(object sender, MyEventArgs e)
{
eventData = e.Data;
StateHasChanged();
}
protected override void Dispose(bool disposing)
{
MyService.MyEvent -= HandleMyEvent;
base.Dispose(disposing);
}
}
在上述代码中,通过@inject
指令将MyHostedService
注入到Blazor组件中。在组件的OnInitialized
方法中订阅MyEvent
事件,并在事件处理程序HandleMyEvent
中更新组件的状态。在组件的Dispose
方法中取消订阅事件,以避免内存泄漏。
这样,当HostedService中的事件被触发时,Blazor组件将接收到事件并更新相应的UI。
领取专属 10元无门槛券
手把手带您无忧上云