.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
相关产品推荐
相关产品推荐

