WinForms应用程序随机无响应

本文关键字:响应 随机 应用程序 WinForms | 更新日期: 2023-09-27 18:28:08

我们正在构建一个基于WinForms的应用程序(使用.NET 3.5)

最近,我遇到过这样的情况:当执行应用程序的一个主要工作流时,应用程序将在几秒钟内变得没有响应,无法正确呈现UI(显示"程序没有响应"消息)。

我们已经将问题简化为一行可疑的代码,该代码为标签控件添加了一个工具提示:

ToolTip tooltip = new ToolTip();
tooltip.SetTooltip(label, "something");

在过去的两天里,我一直在想,在这段代码中,什么可以编码UI线程的任何问题,但没有做到

我的问题是,是否可以使用性能探查器来收集有关此类代码的信息?注意,ToolTip类属于WinForms,我没有它的源代码

删除这些行似乎完全解决了这个问题。我希望在将来减少调试工作,因为这个问题可以在我们代码库的其他位置体现出来。

编辑:我能找到的唯一类似的报告问题是:WinForm ToolTip.SetToolTip正在挂起我的应用程序:(

WinForms应用程序随机无响应

您可以使用JetBrains DotTrace等程序来查看实际导致程序停止的情况

我也有同样的问题,只是我使用了一个使用设计器放置的工具提示对象,然后在工具提示的弹出事件中设置了工具提示的文本。

这个问题只发生在64位的Windows 7上(我不可能测试32位的Win7),在32位的Windows XP上,这很好。

edit:我想弹出事件有一些重复调用,因为当我将收费提示设置移动到代码的其他位置时,它可以正常工作。

我知道这是一个老问题,但挂起仍然发生在Windows 10 64位版本上。在Windows 10 32位上,一切都很正常。我还没有看过.NET源代码,但它一定是等待或其他什么。因此,为了克服这个问题,我添加了以下解决方法:

this.Invoke(new Action(() =>
{
    tooltip = new ToolTip();
    tooltip.SetTooltip(label, "something");
}
));

我已经从主线程调用了这个,所以根据MSDN文档,这没有意义,但它释放了等待锁或其他什么。