C# 隐藏ToolStripMenuItem';自动工具提示
我有一个上下文菜单和另一个下拉上下文菜单,在第二个上下文菜单上,每个项目都有一个工具提示(用C# 隐藏ToolStripMenuItem';自动工具提示,c#,winforms,contextmenu,toolstripmenu,C#,Winforms,Contextmenu,Toolstripmenu,我有一个上下文菜单和另一个下拉上下文菜单,在第二个上下文菜单上,每个项目都有一个工具提示(用toolStripMenuItem.ToolTipText设置): 单击某个项目时,我会启动一些计算密集型操作,但就在调用第一个关联菜单上的Hide()之前: ctxMainMenu.Hide() // computing-intensive statements 这两个菜单将正确消失,但工具提示将保持在顶部,直到后续操作结束 我已经尝试了Application.DoEvents(),将单击项的工具提
toolStripMenuItem.ToolTipText
设置):
单击某个项目时,我会启动一些计算密集型操作,但就在调用第一个关联菜单上的Hide()
之前:
ctxMainMenu.Hide()
// computing-intensive statements
这两个菜单将正确消失,但工具提示将保持在顶部,直到后续操作结束
我已经尝试了Application.DoEvents()
,将单击项的工具提示文本设置为null
等
有时,如果在完全绘制之前单击,只会出现阴影或褪色的工具提示。
我的猜测是,由于没有鼠标移动事件,由于您隐藏了菜单,因此工具提示会在消失之前等待超时,但随后会被延迟,因为您正在锁定GUI。在执行密集任务之前,您是否尝试过使用工具提示的
Hide
方法?解决此问题的正确方法是在单独的线程中执行计算智能语句,而不是锁定GUI线程,这是ofc,如果可能的话。@TeaWithCookies我无法访问工具提示,因为它是自动工具提示:toolStripMenuItem
没有tooltip
属性,只有tooltip
和AutoToolTip
。死锁GUI线程永远不会产生理想的结果。在停止执行昂贵的代码之前,一切都是固定不变的。您需要将其移动到工作线程,使用Task或BackgroundWorker类。