richtextbox中,频繁调用ScrollToCaret()会造成线程堵塞。
在一个项目中,需要频繁对richtextbox数据进行更新,此时会造成窗口主线程的“假死”状态,通过调试可知,是在过快使用 ScrollToCaret()造成的。屏蔽ScrollToCaret()或将其放入其他慢更新事件中,可解决这种“假死”。
我的解决方法是,将ScrollToCaret()放入定时器中,周期1s进行更新ScrollToCaret(),且在richtextbox加载完数据后也使用ScrollToCaret()。
private void CheckStatus(Object state)
{
TimerExampleState s = (TimerExampleState)state;
s.counter++;
if (!PauseFlag && RunningFlag)
{
this.BeginInvoke((MethodInvoker)delegate
{
rtb_ShowLog.ScrollToCaret();
});
}
}
将
CheckStatus放入1S周期的定时器中