AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 76954273
Accepted
Andy Wynn
Andy Wynn
Asked: 2023-08-22 22:24:57 +0800 CST2023-08-22 22:24:57 +0800 CST 2023-08-22 22:24:57 +0800 CST

任何菜单关闭时应用程序都会关闭

  • 772

我正在尝试制作一个非常小的应用程序,它仅位于状态栏中,响应键盘快捷键并具有上下文菜单。每当通过选项选择或用户单击关闭此菜单时,都会调用应用程序 OnExit 方法。

我通过在 .NET7 上创建一个新的 WPF 应用程序制作了一个最小版本,删除了MainWindow.xaml,并删除了 中对它的引用App.xaml,然后这是 中的完整代码App.xaml.cs:

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Forms;

namespace CLP_MVP;
public partial class App : System.Windows.Application
{
    private readonly NotifyIcon _taskbarIcon = new();
    private readonly ContextMenu _contextMenu = new();
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        _taskbarIcon.Icon = ResourceIcons.clp;
        _taskbarIcon.Visible = true;
        _contextMenu.Items.Add(new MenuItem() { Header = "Test" });
        _taskbarIcon.Click += OpenMenu;
    }

    private void OpenMenu(object? sender, EventArgs e)
        => _contextMenu.IsOpen = true;

    protected override void OnExit(ExitEventArgs e)
        => base.OnExit(e);
}

我点击离开时得到了不一致的结果(我希望在这里有任何见解),但我添加了一个菜单项,其中包含未处理的点击事件,该事件有效地关闭了菜单。

通过框架的调用堆栈是:

>   CLP_MVP.dll!CLP_MVP.App.OnExit(System.Windows.ExitEventArgs e) Line 25  C#
    PresentationFramework.dll!System.Windows.Application.DoShutdown() Line 1582 C#
    PresentationFramework.dll!System.Windows.Application.ShutdownImpl() Line 2210   C#
    PresentationFramework.dll!System.Windows.Application.ShutdownCallback(object arg) Line 2198 C#
    WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback, object args, int numArgs) Line 103 C#
    WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source, System.Delegate callback, object args, int numArgs, System.Delegate catchHandler) Line 36 C#
    WindowsBase.dll!System.Windows.Threading.DispatcherOperation.InvokeImpl() Line 540  C#
    WindowsBase.dll!MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(object obj) Line 215  C#
    System.Private.CoreLib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) Line 183  C#
    WindowsBase.dll!MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext executionContext, System.Threading.ContextCallback callback, object state) Line 172 C#
    WindowsBase.dll!System.Windows.Threading.DispatcherOperation.Invoke() Line 412  C#
    WindowsBase.dll!System.Windows.Threading.Dispatcher.ProcessQueue() Line 2095    C#
    WindowsBase.dll!System.Windows.Threading.Dispatcher.WndProcHook(nint hwnd, int msg, nint wParam, nint lParam, ref bool handled) Line 2304   C#
    WindowsBase.dll!MS.Win32.HwndWrapper.WndProc(nint hwnd, int msg, nint wParam, nint lParam, ref bool handled) Line 295   C#
    WindowsBase.dll!MS.Win32.HwndSubclass.DispatcherCallbackOperation(object o) Line 429    C#
    WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback, object args, int numArgs) Line 103 C#
    WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source, System.Delegate callback, object args, int numArgs, System.Delegate catchHandler) Line 36 C#
    WindowsBase.dll!System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority priority, System.TimeSpan timeout, System.Delegate method, object args, int numArgs) Line 1339 C#
    WindowsBase.dll!MS.Win32.HwndSubclass.SubclassWndProc(nint hwnd, int msg, nint wParam, nint lParam) Line 341    C#
    [Native to Managed Transition]  
    [Managed to Native Transition]  
    WindowsBase.dll!System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame frame) Line 2138 C#
    PresentationFramework.dll!System.Windows.Application.RunDispatcher(object ignore) Line 2407 C#
    PresentationFramework.dll!System.Windows.Application.RunInternal(System.Windows.Window window) Line 1695    C#
    CLP_MVP.dll!CLP_MVP.App.Main() Line 53  C#

对此的任何帮助或想法将不胜感激。我认为这与应用程序生命周期的早期终止有关。由于没有“可见”元素(除了来自不同框架的状态栏图标),应用程序处理程序只是终止执行以避免僵尸进程。如果这个假设是正确的,我将不胜感激关于如何避免这种情况的任何想法。

我尝试过使用Hardcodet.Wpf.TaskbarNotification,结果完全相同。

c#
  • 1 1 个回答
  • 28 Views

1 个回答

  • Voted
  1. Best Answer
    Tarazed
    2023-08-22T23:21:50+08:002023-08-22T23:21:50+08:00

    默认情况下,WPF 应用程序将在所有窗口关闭时调用隐式关闭。尝试ShutdownMode="OnExplicitShutdown"在 App.Xaml 文件中进行设置。

    https://learn.microsoft.com/en-us/dotnet/api/system.windows.application.shutdownmode

    请务必添加手动关闭的方法。

    • 1

相关问题

  • Polly DecorlatedJitterBackoffV2 - 如何计算完成所有重试所需的最长时间?

  • Wpf。在 ScrollViewer 中滚动 DataGrid

  • 我在使用 .NET MAUI MVVM 的游戏页面上获得的分数在其他页面上不可见。如何在本地设备中保存分数数据

  • 从 DataTemplate 内部将 TreeView 层次结构与 HierarchicalDataTemplate 结合使用

  • 如何改进 .NET 中的验证接口?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve