我的应用程序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(),如果你有很多的交叉线程事件...
谢谢。
谢谢大家。
编辑:看起来BeginInvoke()真的解决了这个问题。直到现在才会结冰。
https://stackoverflow.com/questions/287142
复制相似问题