代码之家  ›  专栏  ›  技术社区  ›  flavour404

同一个项目,不同的机器,一台机器有交叉线程问题

  •  2
  • flavour404  · 技术社区  · 15 年前

    我有两台机器,一台是东芝的旧笔记本电脑,我在家里用它做开发,另一台是戴尔的一年旧电脑。两者都运行相同版本的VisualStudio2008。在过去的几个月里,我一直在为一个客户建立一个项目。它在我的旧笔记本上运行得很好,但是如果我在工作时在相同的环境下运行它,我会遇到交叉线程问题,有人知道为什么吗?项目/环境中是否有我需要选中或取消选中的内容。。。

    自从我将tab控件添加到主用户界面后,问题就一直存在。交叉线程错误发生在加载主窗体时,当tab控件被动态调整大小时-我让它像一个可扩展的面板一样反应,这样用户可以在不使用它时隐藏它。

    这是线路故障,这是在主负载区:

    expandable_tabcontrol.Left += expandable_tabcontrol.Width;
    

    An unhandled exception of type 'System.InvalidOperationException' 
    occurred in System.Windows.Forms.dll
    
    Additional information: Cross-thread operation 
    not valid: Control 'frmUserInterFace' accessed 
    from a thread other than the thread it was created on.
    

    在家里运转良好,在工作中失败。。。

    谢谢,R。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Jim Mischel    15 年前

    在没有更多信息的情况下很难确定,但在我看来,调整大小的方法可以在多个地方调用。很可能你的旧东芝是一台单核机器,所以电脑不能一次做一件以上的事情,而选项卡的大小是由主线程调整的。在较新的Dell机器上(可能有多个内核),一个辅助线程正在调用执行调整大小的方法,这导致抛出异常。

    研究使用 Control.InvokeRequired Control.Invoke 处理后台线程和UI线程之间的同步。