gpt4 book ai didi

c# - 在单线程 API 中处理事件处理程序休眠的最佳方法?

转载 作者:太空宇宙 更新时间:2023-11-03 16:55:04 25 4
gpt4 key购买 nike

我正在使用非线程安全事件 API。 wait() 被调用,并且从该调用中,事件处理程序被分派(dispatch)。我希望能够在事件处理程序中“休眠”一段时间。目前,我有一个调度程序可以安排稍后调用的函数,并且有一些技巧可以让我使用 Scheduler.Sleeper(some_ienumerator) 作为事件处理程序,因此我可以产生时间跨度作为一种 sleep 。有没有更好的解决办法?如果 C# 有 Ruby 风格的纤程,我就可以让调度器有一个我可以调用的 Sleep() 函数, sleep 的东西可以在事件处理程序调用的函数中,而不是直接在处理程序中。鉴于缺乏易于使用的纤维,我还能做些什么吗?

澄清编辑:我调用了 wait(n),其中 n 是一个时间量,在等待调用期间,API 调用事件处理程序。我想在其中一些处理程序中“休眠”的原因是因为这是一个游戏,在点击某物后,一个对象可能会发光一秒钟。

最佳答案

你的问题不是很清楚。问题是你在“等待”的时候想做什么?例如,如果您谈论的是 WinForms GUI 应用程序,那么您可能希望在等待时处理其他事件(这可以使用 Application.DoEvents 方法完成),那么也许您可以使用类似的解决方案?

可以使用迭代器(yield return)关键字在 C# 中模拟轻量级协作多线程(可能类似于 Ruby 纤程)。在 .NET 中执行此类操作的更好方法是使用 F#,您可以使用 异步工作流 更优雅地执行此类操作。这是一篇演示编写单线程 GUI 的文章,您可以在其中“等待”事件发生而不会阻塞:

正如我所说,您可以使用 yield return 在 C# 中对此进行模拟。这是我的尝试:

另一种基于yield return 的方法是 Concurrency and coordination runtime ,这有点复杂,但主要是为 C# 设计的。

关于c# - 在单线程 API 中处理事件处理程序休眠的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2413608/

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