我有一个Winforms应用程序,它部署在许多客户端站点上,运行时没有问题。
我有一个网站(实际上第二个已经报告了),在那里,应用程序会毫无理由地冻结。
事件单堆栈跟踪我们通过一个迷你转储显示冻结在OnUserChanged事件..。

ViewManager.RunApplication是我称之为Application.Run(m_mainFrame.Form);的地方,m_mainForm是我的主要申请表格。
我在这方面发现了许多帖子,还有各种各样的建议,例如自定义启动屏幕--我删除了它--没有区别,订阅Microsoft.Win32.SystemEvents*事件,如下面所示
[STAThread]
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Thread.CurrentThread.Name = "My App";
// Empty handler to try and stop freeze
Microsoft.Win32.SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;
Microsoft.Win32.SystemEvents.DisplaySettingsChanging += SystemEvents_DisplaySettingsChanging;
Microsoft.Win32.SystemEvents.UserPreferenceChanged += SystemEvents_UserPreferenceChanged;
// Must be called before first window creation:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);我试着在给我的一个内存转储上跟随这个职位,但是用windbg无法通过第二步。
我放弃了这个,接下来我遵循了这里的建议
我被允许访问一个问题客户端机器,当它冻结时,使用spy++获得以下结果.

正如文章中所建议的,我扩展了线程,并寻找第二个线程。
我能看到两个有窗户的线程。查看我同时执行的内存转储,以便匹配线程did ),这两个线程都只是未命名的工作线程(在窗口中看不到主UI线程)。
带有TabletPenServiceHelperClass的那个看起来很不寻常,我找不到很多关于它的信息。
有没有人对从这里到哪里,或者TabletPenServiceHelperClass是什么有任何建议,这与这些冻结有什么关系吗?这是一个令人沮丧的问题。
谢谢您提供的任何信息
UPDATE1
看起来Spyxx和Visual (调试)中的线程in根本不匹配。我在本地机器上运行我的应用程序(这样我就可以看到我有inb的Windows ),并且我可以识别我在两个地方的主UI线程,它们有完全不同的ids.

无论如何,我可以在spy++中看到,我的主应用程序UI线程有一个窗口,另一个线程下有两个额外的窗口.

我也不知道这是什么。当我进入属性(通过spy++)时,我可以看到其中一个窗口有标题.NET-BroadcastEventWindow.4.0.0.0.3f2ddb3.0,另一个只表示Default IME。
有谁知道这些是什么吗(谷歌不会带来太多的信息。)(目前)
无论如何,我不像麻烦的实例那样拥有TabletPenServiceHelperClass。
发布于 2018-10-17 05:57:19
SystemEvent.OnUserPreferencesChanged冻结通常可以通过仅仅锁定(Win+L)和解锁Windows屏幕来再现。
请尝试从CheckSystemEventsHandlersForFreeze()方法中调用这个答案 (在冻结之前甚至之后!)要找出最初在错误的线程(非UI,通常是线程池)上创建的pool控件,从而导致冻结。
发布于 2018-10-17 06:31:44
我终于在我的案子里发现了这个问题。我必须使用MS支持,并且使用一个转储文件,他们能够将我在一个工作线程上创建的窗口引脚到哪里。查看代码,我的猜测是,在调用它的控件有一个窗口句柄之前,它被调用时出现了一个InvokeRequired失败。
我现在总是在InvokeRequired主应用程序窗口上调用,但是有一个嵌套非常深的地方被遗漏了。
如果您的情况如这里所示,即在工作线程上创建的窗口,OnUserPreferencesChanged稍后会导致此冻结。
https://stackoverflow.com/questions/51667477
复制相似问题