c ++ MFC从工作线程设置/附加文本到richedit控件
Posted
技术标签:
【中文标题】c ++ MFC从工作线程设置/附加文本到richedit控件【英文标题】:c++ MFC setting/appending text to a richedit control from a worker thread 【发布时间】:2014-02-03 21:37:37 【问题描述】:从主线程我可以像这样使用成员变量:
CString updatetext;
updatetext.Format(L"character length: %d\n", length );
long nStart, nEnd;
m_richeditcont.
GetSel(nStart, nEnd);
m_richeditcont.SetSel(nEnd, nEnd);
m_richeditcont.ReplaceSel(updatetext);
但是,如果没有工作线程,程序就会挂起。您不能使用工作线程中的成员变量,那么我将如何使用工作线程中存储在 updatetext 中的文本来更新 Richedit 控件?
我没有任何实际代码,上面的代码只是一个示例,我只是想知道如何将存储在 updatetext 中的文本从工作线程附加到 Richedit 控件。
【问题讨论】:
【参考方案1】:工作线程可以使用 PostMessage 或 SendMessage 将数据发送到 GUI 线程。那么GUI线程应该负责修改GUI。请参阅此处的常见问题解答 12:
http://vcfaq.mvps.org/mfc/index.htm
工作线程应该在堆上分配 CString,然后在自定义消息的 lparam 或 wparam 中发布指针。 GUI 线程将指针转换回 CString* 并更新控件。最后,GUI 线程从堆中删除 CString。
【讨论】:
+1 for 最后,GUI 线程从堆中删除了 CString。 非常重要!!以上是关于c ++ MFC从工作线程设置/附加文本到richedit控件的主要内容,如果未能解决你的问题,请参考以下文章
mfc c++ 将带有 postmessage 的自定义用户消息从工作线程发送到主 ui 线程