首页 文章

在不同的线程.NET中创建的控件

提问于
浏览
2

我正在调试.NET应用程序中的有线问题 . 我们将Forms和Controls动态插件作为对某些服务器事件的反应 . 当然,与服务器的通信是在线程中完成的 . 所有UI元素都通过Control的Invoke Mechanism进行操作 .

我仍然得到跨线程异常 . 在某些子控件中,InvokeRequired属性为true,尽管其父级的InvokeRequired属性为false . 所以这些孩子必须在主线之外创建 . 我正在寻找可能导致这个错误的Control创建的线程 . 正如您在Visual Studio的线程视图的屏幕截图中看到的那样,有许多名为“mainX”的工作线程(这些只是其中的一部分),我不知道它们来自哪里 .

这是“旧”主线程的某种标准命名模式吗?也许是由于 - 我不知道 - 多次调用Application.Run或类似的东西?

wired worker threads

欢迎任何建议!

Edit (总结一下)
我有一个带有InvokeRequired == false的根控件和一些带有InvokeRequired == true的子控件 . 这怎么可能呢? root.Controls.Add(child)应该已经抛出异常 .

是否有人知道导致线程命名模式的原因,如截图所示?

1 回答

  • 2

    我认为可能发生的是你在控件创建其句柄之前以某种方式检查Control的InvokeRequired属性 . 如果这样做,InvokeRequired将返回false,即使它是一个单独的线程 .

    你可以通过检查Control.IsHandleCreated来检查这一点,这样你至少可以知道这是不是正在发生的事情 . 修复它,如果确实发生了什么是其他的东西,虽然......

相关问题