我目前正在调试我们的 .NET 应用程序中的有线问题。我们将表单和控件动态地插入在一起,作为对某些服务器事件的反应。与服务器的通信当然是在线程中完成的。所有 UI 元素都通过 Control 的调用机制进行操作。
我仍然得到跨线程异常。在某些子控件中,InvokeRequired 属性为 true,尽管其父控件的 InvokeRequired 属性为 false。所以这些孩子一定是在主线程之外创建的。我目前正在寻找可能导致此错误控件创建的线程。正如您在 Visual Studio 线程视图的屏幕截图中所见,有许多名为“mainX”的工作线程(这些只是其中的一部分),我不知道它们来自哪里。
这是“旧”主线程的某种标准命名模式吗?也许是由于 - 我不知道 - 多次调用 Application.Run 或类似的东西?
欢迎任何建议!
编辑(总结一下)
我有一个带有 InvokeRequired == false 的根控件和一些带有 InvokeRequired == true 的子控件。这怎么可能呢?root.Controls.Add(child) 应该已经抛出异常。
是否有人知道导致线程命名模式的原因,如屏幕截图所示?