我有一个在报表模式下的 Windows 窗体,里面有一个 ListView。对于视图中的每个项,我都需要执行一个长时间运行的操作,其结果是一个数字。
在本机 Win32 中,我会为每个项创建一个工作线程(天真地;当然我不会创建无限数量的线程),然后在线程句柄数组上 MsgWaitForMultipleObjects()。每当计算完成时,线程会发出信号,主 UI 线程就会醒来并更新。与此同时,我们泵送消息,以保持 UI 线程的响应性。
有人能提供一个在 C# 中实现的示例吗?我看过 Monitor 对象,但它似乎不是我想要的或者它是否在阻塞时泵送消息?
谢谢。
编辑:似乎 WaitHandle.WaitAny() 实际上可以泵送消息。请参见cbrumme 的论文关于 CLR 中的消息泵。
sleep(100)
或类似的方法来强制进行上下文切换,这非常令人沮丧。 - i_am_jorf