【发布时间】:2018-08-03 07:33:11
【问题描述】:
我有一个 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);
我尝试关注this post 我收到的其中一个内存转储,但使用windbg 无法通过第二步
我放弃了,接下来按照here的建议进行操作
我被授予访问有问题的客户端计算机的权限,当它冻结时,使用 spy++ 获得以下结果...
按照帖子中的建议,我扩展了线程并寻找第二个线程
我可以看到那里有两个带有窗口的线程。查看我同时进行的内存转储,因此我可以匹配线程 ID),这两个线程都只是未命名的工作线程(我无法看到主 UI 线程有一个窗口)
带有 TabletPenServiceHelperClass 的那个看起来很不寻常,我找不到太多关于它的信息。
有没有人对从这里去哪里有任何建议,或者 TabletPenServiceHelperClass 是什么,这可能与这些冻结有关吗?这是一个令人沮丧的问题。
提前感谢您提供任何信息
[更新1]
看起来 Spyxx 和 Visual Studio(调试)中的线程 ID 根本不匹配。我在本地机器上运行我的应用程序(所以我可以看到我有哪些 Windows inb spyxx),我可以在这两个地方识别我的主 UI 线程,并且它们具有完全不同的 id...
无论如何,我可以在 spy++ 中看到,我的主应用程序 UI 线程有一个窗口,另外一个线程下还有两个额外的窗口...
我也不确定这个是什么。当我进入属性(通过 spy++)时,我可以看到其中一个窗口的标题为 .NET-BroadcastEventWindow.4.0.0.0.3f2ddb3.0,另一个只是显示 Default IME。
有谁知道这些是什么(谷歌搜索并没有带来太多......但是)
无论如何,我没有问题实例所具有的 TabletPenServiceHelperClass。
【问题讨论】:
-
您搜索过
Wisptis.exe(通常是\System32)吗?Windows ink Services的一部分。可以在启动时执行,也可以与一些众所周知的程序(例如 Adobe Reader)结合使用。使用TabletPenServiceHelperClass可以成为 Windows OOBE (HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE) 的一部分,请参阅:Customize the Out of Box Experience (OOBE)。删除 .exe 并重试。
标签: c# .net multithreading winforms