.net - WPF无响应的UI问题

标签 .net wpf multithreading user-interface

我有一个显示一些奇怪行为的应用程序,但我无法弄清楚。基本上,我的应用程序会启动,并尝试连接到通过USB连接的某些外部硬件。进行此操作时,我将显示一个“繁忙”窗口,其中包含一些简单的动画。但是,在硬件初始化时,UI会间歇性地完全挂起(动画和全部)。

问题是,该问题是间歇性的,并且我已经确保它在后台线程上运行(通过Task.StartNew)。我尝试用“Thread.Sleep(5000)”之类的东西替换硬件初始化调用来模拟挂起,并且UI行为正确,因此在这里我有点主意。

硬件本身(以及用于与之交互的非托管库)是否可能以某种方式干扰系统并导致问题?我真的很讨厌诉诸硬件,但是我还缺少其他调查途径或其他可能的软件问题吗?

最佳答案

您是否使用COM库连接到设备?如果将COM作为STA引入,则最终可能会将其某些工作委派给UI线程,从而导致对另一个线程的阻塞调用有时也会阻塞主UI线程。我很烦。行为良好的COM组件不会执行此操作,但是我之前曾遇到过。您可以通过仅隔离导致测试应用程序中阻塞的调用,而不进行其他任何操作来诊断是否正在发生这种情况。创建一个UI计时器并记录滴答声。如果在单独的线程上调用COM方法时,滴答声停止触发,则表明COM组件的行为异常。

关于.net - WPF无响应的UI问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8360459/

相关文章:

大型应用程序的 C# 架构

c# - WPF 垂直 gridsplitter 不工作

c# - 多线程应用程序

wpf - WPF 中的菜单访问键

c# - 如何将 native 窗口处理程序 (HWND) 嵌入到 C# WPF 应用程序中

multithreading - 处理同一应用程序的多个线程的有效方法

java - RxJava Multithreading with Realm - 从不正确的线程访问 Realm

.net - Linq to Entities 查询*总是*访问数据库吗?

.net - 什么是 Microsoft.Contracts,它来自哪里?

c# - 当鼠标悬停在 ScrollViewer 上时,为什么我的 WPF 样式触发器无法仅显示水平滚动条?