gpt4 book ai didi

c# - 手动编码到线程

转载 作者:太空狗 更新时间:2023-10-29 21:07:34 26 4
gpt4 key购买 nike

在 WinForms 中,您有 Control.BeginInvoke(),这意味着您可以将后台线程的调用编码到创建控件句柄的主 UI 线程。

这很好,但是(在 C# 中)您将如何在两个“标准”线程之间执行此操作?

我写了一个服务总线,它有一个处理器线程来消费消息。我想要一个计时器触发,这会导致该处理器线程执行某些操作,而不是在计时器线程中运行的代码。

当然我可以使用线程同步(Monitor/using() {...})但想知道它是如何正常完成的。

最佳答案

不幸的是,这里很难给出答案,因为它在很大程度上取决于线程的性质。

线程之间的编码并不神奇。有一个潜在的机制可以做到这一点。例如,在 WinForms 中,Control.Invoke 样式函数通过消息传递工作。有一条消息发布到 UI 线程,消息泵最终会抽取此消息并将其转换为 Marshal 调用。

为了编码标准线程之间的调用,它必须具有某种能力,通过它可以检测到编码调用想要发生,然后使该调用发生。这通常是通过某种消息传递来完成的。

恕我直言,执行此操作的最标准方法是让您的线程实现、提供并安装 SynchronizationContext。这是在线程之间定义编码(marshal)处理机制的一种更标准的方法。

关于c# - 手动编码到线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1038518/

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