gpt4 book ai didi

.net - 为什么 Control.Invoke 是必要的?

转载 作者:行者123 更新时间:2023-12-03 13:16:28 26 4
gpt4 key购买 nike

Control.Invoke在拥有控件的底层窗口句柄的线程上执行指定的委托(delegate)。

多年来,我只是接受这是必须的方式,但我一直不明白为什么。

我唯一能想到的就是代码是非常不安全的线程,而不是仅仅在控制代码中添加一点同步,框架只是不允许它并迫使我们走这条路——把婴儿和洗澡水一起扔出去!

  • 纯粹是微软的懒惰,还是我没有得到什么?
  • 其他编程框架/其他操作系统是否有类似的问题,还是只是 Windows 的问题?
  • 除了更改我们应用程序中的每个功能之外,还有其他方法吗?
  • 最佳答案

    这是底层 Windows 用户界面的限制,与 .NET 框架本身几乎没有关系。在控件和窗口上执行许多操作(在 Windows 意义上,而不是组件模型意义上)需要在创建窗口句柄的线程上执行这些操作。 .NET 框架与任何其他应用程序一样,必须遵守此规则。

    当然,微软可以在框架中加入同步来防止这个问题,但是这样做会为不需要该功能的应用程序增加大量的性能开销(因为它们主要是单线程的)。

    微软的决定是强制那些需要开销的人明确地管理它,而不是把它强加给每个人。

    关于.net - 为什么 Control.Invoke 是必要的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1973725/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com