【问题标题】:Is there any alternative to Application.DoEvents() for a web service对于 Web 服务,是否有任何替代 Application.DoEvents() 的方法
【发布时间】:2009-01-22 23:38:44
【问题描述】:

是否有任何替代 System.Windows.Forms.Application.DoEvents() 的方法来刷新不使用 System.Windows.Forms 命名空间的事件队列?如果不是,是否可以在 Web 服务中使用上述方法/命名空间。

【问题讨论】:

    标签: c# .net vb.net multithreading


    【解决方案1】:

    Application.DoEvents 用于使表单元素在进程中重绘 这会阻止引发表单绘制事件,因此我不能在 Web 服务中使用。在 Web 服务中,您没有用户界面,没有窗口,也没有消息循环 所以 DoEvents 不会做任何事情。

    您认为为什么需要在 Web 服务中使用 Application.DoEvents?

    您很可能正在寻找多线程。如果您需要并行执行几件事,则应该使用线程。

    编辑查看 cackes 帖子了解更多信息

    【讨论】:

    • 这有点过于简单了。它处理的不仅仅是绘画事件。
    • 是的,我知道是这样,但现在是喝咖啡的时间,所以我做得很快。 :)
    【解决方案2】:

    正如 Nathan 所指出的,DoEvents 实际上只是循环 Windows 消息泵,导致队列中的顶部消息被翻译和分派。在 Web 服务中,它不太可能做任何事情(除非您使用 IPC 的 Windows 消息或一些古怪的东西)。

    如果你有一个线程窃取过多调度程序量子的问题,你可以调用 Thread.Sleep(0) 强制调用线程在下一个调度程序滴答之前让步,这可能会给你其他饥饿的线程更多机会运行,尤其是当它们的优先级相同或更低时。

    不过,如果您对这有帮助,那么您很有可能需要重新编写代码以首先防止这种情况发生,而不是尝试通过调度程序产生来修复它。

    【讨论】:

      猜你喜欢
      • 2021-09-27
      • 2011-04-21
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多