Invoke() 被阻塞

2024-02-11

我的应用程序 GUI 有时会停止重绘。 有很多线程正在触发各种事件(例如计时器或网络数据就绪等)。还有很多控件正在订阅这些事件。因此,所有事件处理程序都会玩 InvokeRequired/Invoke 游戏。 现在我发现当 GUI 冻结时,很多线程正在等待 Invoke() 返回。看起来消息泵已停止泵送。 处理程序如下所示:

private void MyEventHandler( object sender, EventArgs e ) {
    if ( InvokeRequired ) {
        Invoke( new EventHandler( MyEventHandler ), sender, e );
        return;
    }

    SetSomeStateVariable();
    Invalidate();
}

有任何想法吗?

解决方案:BeginInvoke()。看起来如果你有很多跨线程事件,你应该总是使用 BeginInvoke()...

Thanks.

谢谢大家。

EDIT:好像BeginInvoke()真的解决了。到现在还没结冰。


Invoke 会等待,直到事件在 GUI 线程中得到处理。如果您希望它是异步的,请使用 BeginInvoke()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Invoke() 被阻塞 的相关文章

随机推荐