NotifyIcon的ContextMenu有时不起作用

时间:2013-05-01 07:02:33

标签: c# multithreading contextmenu notifyicon

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

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

我在NotifyIcon工具提示控件中添加了ContextMenu控件。每当应用程序空闲(没有做任何工作)时,上下文菜单工作正常,但在进程运行期间,上下文菜单会挂起。

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

1 个答案:

答案 0 :(得分:2)

完全相同的规则适用于具有NotifyIcon作为使用Window或Form显示用户界面的程序的程序。 NotifyIcon将通知发送到进程的主线程,即您在其上调用Application.Run()的进程。如果那个主线程忙于其他任务,比如“运行一个进程”,那么NotifyIcon会变成紧张性的。它正在尝试发送通知,但是您的主线程没有正在侦听,因为它正在忙于执行“进程”。

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

如果您已经这样做了,那么问题就不清楚了,那么请注意一个太经常调用ReportProgress的BackgroundWorker,但仍然会让主线程陷入困境。