我有一个使用 BackgroundWorker 执行一系列测试的表单。我使用 ProgressChanged 事件将消息发送到主线程,然后主线程执行 UI 上的所有更新。我已经梳理了我的代码,以确保我没有对后台工作人员中的 UI 做任何事情。我的代码中没有 while 循环,BackgroundWorker 的执行时间有限(以秒或分钟为单位)。但是,由于某种原因,当我锁定我的计算机时,当我重新登录时,应用程序通常会挂起。问题是,发生这种情况时,BackgroundWorker 甚至都没有运行。我认为它与 BackgroundWorker 相关的原因是因为表单仅在加载应用程序后执行 BackgroundWorker 时挂起(它仅在给定特定用户输入时运行)。
我通过 RunWorkerAsync 方法从 UI 中的 TreeView 向该线程传递了一个 TreeNode 列表,但我只在工作线程中读取这些节点。我对它们所做的任何修改都是通过 progressChanged 事件在 UI 线程中完成的。
我确实在我的工作线程中使用 Thread.Sleep 以定时间隔执行测试(这涉及通过 TCP 套接字发送消息,该套接字不是在工作线程中创建的)。
我对为什么我的应用程序可能会挂起感到完全困惑。我确定我在某处做“非法”的事情,我只是不知道是什么。