C++ SetScrollPos正在阻塞

C++ SetScrollPos正在阻塞,c++,winapi,mfc,C++,Winapi,Mfc,在我的多线程mfc应用程序中,m_view->SetScrollPos被阻塞,所有应用程序都被冻结。视图是在另一个线程中创建的,这是导致这种行为的原因吗 //SetScrollPos(SB_HORZ,pos); ::SetScrollPos(GetSafeHwnd(), SB_HORZ, pos, true); 同样的情况也发生在setScrolInfo()上,原因很简单: 更改滚动位置会导致创建一些窗口消息。如果您在另一个线程中,并且承载窗口的线程尚未准备好通过GetMessaage/Pos

在我的多线程mfc应用程序中,m_view->SetScrollPos被阻塞,所有应用程序都被冻结。视图是在另一个线程中创建的,这是导致这种行为的原因吗

//SetScrollPos(SB_HORZ,pos);
::SetScrollPos(GetSafeHwnd(), SB_HORZ, pos, true);
同样的情况也发生在setScrolInfo()上,原因很简单:

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

这是一种正常且有充分记录的行为


我的建议是:永远不要从其他线程执行UI操作。选择一种中立的通信方法来通知另一个线程有关更改的信息(PostMessage、Timer和data field、aso)…

我尝试使用
PostThreadMessage()
在ui线程中执行setscrollpos,但未调用处理程序。我检查了ui线程是否正确发送了其他消息(未被阻止)。您是否可以回答以下问题: