You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI Windows应用点击Toast/Snackbar启动新实例问题求助

解决Windows平台.NET MAUI Toast/Snackbar点击启动重复实例问题

问题根源

Windows平台下默认配置的.NET MAUI应用未启用单实例模式,且Toast/Snackbar点击触发的激活事件未关联到现有窗口,导致每次点击都会启动新的应用实例。

解决方案步骤

1. 配置Windows端单实例启动逻辑

在Windows项目的App.xaml.cs中,修改OnLaunched方法,检查是否已有运行实例,若存在则直接激活现有窗口而非启动新实例:

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    // 检查当前应用是否已有活跃窗口
    var existingView = Windows.ApplicationModel.Core.CoreApplication.Current.Views.FirstOrDefault(v => v.IsMain);
    if (existingView != null)
    {
        // 激活现有窗口并恢复正常状态(避免最小化时无法前置)
        existingView.CoreWindow.Activate();
        existingView.CoreWindow.WindowState = Windows.UI.Core.CoreWindowState.Normal;
        return;
    }

    base.OnLaunched(args);
}

2. 处理激活事件确保窗口前置

重写OnActivated方法,无论何种激活方式(包括Toast点击),都将现有窗口前置:

protected override void OnActivated(IActivatedEventArgs args)
{
    var mainWindow = Window.Current;
    if (mainWindow != null)
    {
        mainWindow.Activate();
        mainWindow.WindowState = Windows.UI.Core.CoreWindowState.Normal;
    }
    base.OnActivated(args);
}

3. 保持原有Toast显示逻辑不变

你的现有Toast显示代码无需修改,只需确保上述Windows端的生命周期逻辑配置完成:

using CommunityToolkit.Maui.Alerts;
 
private async void OnCounterClicked(object sender, EventArgs e)
{
    await Toast.Make("Toast is here", ToastDuration.Short).Show();
}

补充说明

  • 以上逻辑仅针对Windows平台生效,无需修改其他平台代码
  • 若后续CommunityToolkit.Maui版本更新,需确认Toast激活逻辑未发生变化,如有调整可同步修改窗口激活逻辑

内容的提问来源于stack exchange,提问作者Revati Nikumbh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:22:42