我正在开发一个 Windows 应用程序以在后台运行(用于长时间运行的过程)。
应用程序通过 NotifyIcon 工具提示显示进程状态。
我在 NotifyIcon 工具提示控件中添加了一个 ContextMenu 控件。每当应用程序空闲(不做任何工作)时,上下文菜单工作正常,但在进程运行期间上下文菜单挂起。
所有进程都在不同的线程中运行。谁能告诉我如何为长时间运行的后台进程制作流畅的上下文菜单?
我正在开发一个 Windows 应用程序以在后台运行(用于长时间运行的过程)。
应用程序通过 NotifyIcon 工具提示显示进程状态。
我在 NotifyIcon 工具提示控件中添加了一个 ContextMenu 控件。每当应用程序空闲(不做任何工作)时,上下文菜单工作正常,但在进程运行期间上下文菜单挂起。
所有进程都在不同的线程中运行。谁能告诉我如何为长时间运行的后台进程制作流畅的上下文菜单?
完全相同的规则适用于具有 NotifyIcon 的程序作为使用 Window 或 Form 来显示用户界面的程序。NotifyIcon 将通知发送到进程的主线程,您在该主线程上调用了 Application.Run()。如果该主线程正忙于其他任务,例如“运行进程”,那么 NotifyIcon 就会紧张。它正在尝试发送通知,但您的主线程没有在监听,因为它正忙于执行该“进程”。
而且您必须以与常规 gui 程序完全相同的方式解决此问题,您必须在工作线程上运行处理代码。使用标准的 .NET 解决方案,例如 BackgroundWorker、Task 或 async/await 关键字。或者使用 Thread 或 ThreadPool 旋转你自己的。
如果您已经在这样做,那么问题并不清楚,那么请注意,比如说,一个经常调用 ReportProgress 并且仍然让主线程陷入困境的 BackgroundWorker。