【问题标题】:NotifyIcon's ContextMenu not working sometimesNotifyIcon 的 ContextMenu 有时不工作
【发布时间】:2013-05-01 07:02:33
【问题描述】:

我正在开发一个在后台运行的 Windows 应用程序(用于长时间运行的进程)。

应用程序通过 NotifyIcon 工具提示显示进程状态。

我向 NotifyIcon 工具提示控件添加了一个 ContextMenu 控件。只要应用程序空闲(不做任何工作),上下文菜单就可以正常工作,但在进程运行期间,上下文菜单会挂起。

所有进程都在不同的线程中运行。谁能告诉我如何为长时间运行的后台进程制作流畅的上下文菜单?

【问题讨论】:

  • 这可能很难做到,因为程序正在处理其他事情,它并没有真正考虑上下文菜单,也许将上下文菜单添加到单独的线程中?

标签: c# multithreading contextmenu notifyicon


【解决方案1】:

确切相同的规则适用于具有 NotifyIcon 的程序作为使用 Window 或 Form 来显示用户界面的程序。 NotifyIcon 将通知发送到进程的主线程,您在该主线程上调用了 Application.Run()。如果该主线程正忙于其他任务,例如“运行进程”,那么 NotifyIcon 就会紧张。它正在尝试发送通知,但您的主线程没有在监听,因为它正忙于执行该“进程”。

您必须以与常规 gui 程序完全相同的方式解决此问题,您必须在工作线程上运行处理代码。使用标准的 .NET 解决方案,例如 BackgroundWorker、Task 或 async/await 关键字。或者使用 Thread 或 ThreadPool 自行旋转。

如果您已经在这样做,但问题并不清楚,那么请注意,例如,一个过于频繁地调用 ReportProgress 并且仍然使主线程陷入困境的 BackgroundWorker。

【讨论】:

    猜你喜欢
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多