gpt4 book ai didi

c# - 在特定线程上调用委托(delegate) C#

转载 作者:可可西里 更新时间:2023-11-01 09:12:13 24 4
gpt4 key购买 nike

有没有办法让委托(delegate)在特定线程上运行?

假设我有:

CustomDelegate del = someObject.someFunction;
Thread dedicatedThread = ThreadList[x];

我能否拥有一致的后台长时间运行线程并在需要时调用我自己的委托(delegate)?每次都必须是同一个线程。

[编辑]

我希望它在专用线程上的原因是时间是我打算在其上运行委托(delegate)并在 y 毫秒后挂起线程,并在我运行另一个线程时恢复线程委托(delegate)给它。我看这是不可能的。我将有一个委托(delegate)队列,让线程的主要功能从中读取并运行。

为了用一个具体的例子来说明,我有一个带有一堆玩家线程的游戏系统。我希望每个玩家线程都在其上运行游戏事件的事件处理程序。如果事件处理程序花费太多时间,我希望能够通过暂停其线程来暂停该特定播放器直到下一个事件。

因此有一个专用线程,我可以在其上运行多个事件处理程序,我可以暂停特定玩家的 AI,以防它出现错误或花费的时间太长。

最佳答案

我认为最好的解决方案是使用Task 对象并将它们排队到StaThreadScheduler。运行单个线程。

或者,您可以在 Nito.Async 中使用 ActionThread创建一个带有内置 Action 委托(delegate)队列的普通线程。

但是,这些都不会直接解决另一个需求:“暂停”一个 Action 并继续另一个 Action 的能力。为此,您需要在每个操作中都添加“同步点”,并有办法保存其状态、重新排队并继续执行下一个操作。

所有这些复杂性都非常接近于线程调度系统,因此我建议退后一步并进行更多的重新设计。您可以允许每个操作都排队到 ThreadPool(我建议让每个操作都成为一个 Task 对象)。您仍然需要添加“同步点”,但您只需要暂停(阻止)它们,而不是保存状态并重新排队。

关于c# - 在特定线程上调用委托(delegate) C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3481075/

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