gpt4 book ai didi

c# - 我应该使用 Invoke 还是 SynchronizationContext 从另一个线程更新表单控件?

转载 作者:太空狗 更新时间:2023-10-29 23:10:17 24 4
gpt4 key购买 nike

试图集中精力从其他线程更新 UI 控件。

目前正在使用 BeginInvoke,老实说它工作正常,但我一直听说您也可以使用 SynchronizationContext 来做同样的事情。

哪个是首选?

此外,从线程更新 UI 是否是一种不好的做法?引发一个事件并让主窗体处理它会更好,还是有其他更好的方法来做到这一点?

对于这个有些主观的问题,我们深表歉意,但在线程世界中有很多选择,我正在努力了解它们之间的差异以及它们各自适用的地方,以及为 future 编写可读和可扩展代码的最佳实践.

编辑:现在我还看到还有 TaskScheduler.FromCurrentSynchronizationContext 路由。有很多选择 x_x

最佳答案

我更喜欢 SynchronizationContext 而不是 Control.InvokeControl.Invoke 的危险在于拥有的 Control 存在生命周期问题。如果在您尝试对其进行 Invoke 时处置了 Control,那么它会影响调用成功的能力。当对话框关闭、 View 移动等时会发生这种情况......

SynchronizationContext.Current 虽然通常与它关联的线程一样长。它确实有有限的生命周期,因此最终会出现同样的问题,但它比 Control 更容易预测。

关于c# - 我应该使用 Invoke 还是 SynchronizationContext 从另一个线程更新表单控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7480359/

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