SetScrollPos正在阻止

时间:2015-04-30 08:29:03

标签: c++ winapi mfc

在我的多线程mfc应用程序中,m_view-> SetScrollPos正在阻止,并且所有应用程序都已冻结。 View是在另一个线程中创建的,这是出现这种行为的原因吗?

//SetScrollPos(SB_HORZ,pos);
::SetScrollPos(GetSafeHwnd(), SB_HORZ, pos, true);

SetScrollInfo()也是如此。

1 个答案:

答案 0 :(得分:2)

原因很简单:

选择滚动位置会导致创建一些窗口消息。如果您在另一个线程中并且托管窗口的线程尚未准备好通过GetMessaage / PostMessage处理消息,则使用SendMessage的线程将被阻止,直到可以传递消息。

这是一种正常且记录良好的行为。

我的建议:永远不要从另一个线程执行UI操作。选择一个中立的通信方法来通知另一个线程有关更改(PostMessage,Timer和数据字段,aso。)...