c# - Blazor 使元素在 x 秒后消失

标签 c# blazor .net-5

我构建了一个通知系统,它在 NotificationHandler blazor 组件中显示引导警报 div。这工作正常,但通知保留在那里。我想让这些通知在 x 秒后消失。如何在不阻塞 UI 并确保它在 blazor 渲染线程上执行的情况下执行此操作。

请参阅下面的示例代码:

@inject INotificationHandler Handler;

@foreach (var notification in _notifications)
{
<div class="alert alert-success">
  <p>@notification</p>
</div>
}

@code
{
  private List<string> _notifications = new ();

  protected override void OnInitialized()
  {
     Handler.OnReceived += OnReceived;
  }

  private async Task OnReceived(string notification)
  {
     await InvokeAsync(() => {
        _notifications.Add(notification);
        StateHasChanged();
        
        // TODO: remove notification the _notifications after x seconds
     });
  }
}
public interface INotificationHandler
{
  public event Func<string Task> OnReceived;
}

最佳答案

await InvokeAsync(async () =>    // note the 'async'
  {  
    _notifications.Add(notification);
    StateHasChanged();
    
    // TODO: remove notification the _notifications after x seconds
    await Task.Delay(2_000);  // x = 2
    _notifications.Remove(notification);
    StateHasChanged();
  });

需要调用 StatehasChanged(),因为 OnReceived() 是一个不属于正常 Blazor 生命周期的事件。

Task.Delay() 创建暂停,但也允许呈现新状态。

关于c# - Blazor 使元素在 x 秒后消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67984436/

相关文章:

c# - .Net 5.0 中对 WPF 的响应式扩展支持

c# - 从 .Net Core 3.1 升级到 .Net 5 后序列化和 MD5 哈希失败

c# - 为什么参数比 where 子句中的文字值慢?

c# - 考虑为游戏开发切换语言?我是不是该?

c# - 将 XAML PathGeometry 转换为 WPF PathGeometry

three.js - 如何在 Blazor 应用程序中加载 .gltf

Blazor,如何触发回车键事件来操作按钮功能?

c# - 我创建了一个 ListView UserControl,但是在向它添加项目时将它拖到 form1 设计器后,我什么也看不到,为什么?

c# - 如何使用 ITextSharp 和 C# Blazor 下载编辑后的 ​​PDF

c# - 重定向到页面 OnActionExecuting 方法 ASP.NET Core 5 MVC