对于Web服务,Application.DoEvents()是否有任何替代方法

时间:2009-01-22 23:38:45

标签: c# .net vb.net multithreading

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

2 个答案:

答案 0 :(得分:6)

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

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

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

编辑请参阅ctackes帖子了解更多信息

答案 1 :(得分:5)

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

如果你遇到一个线程窃取太多调度程序量子的问题,你可以调用Thread.Sleep(0)来强制调用线程产生直到下一个调度程序滴答,这可能会给你的其他饥饿线程提供更多机会运行,特别是如果它们具有相同或较低的优先级。

尽管如此,如果你有饥饿感,这很有帮助,你很可能需要重新编写代码来防止这种情况,而不是试图通过调度程序产生来修复它。

相关问题