多くの OS では、ワーカスレッドから UI を操作できない。
例えば、Android では、AsyncTask の doInBackground から Toast.makeText を実行すると exception が発生する。
今回、MFC で、ワーカスレッドからツールバーを操作したとき、ツールバーが消えることを確認した。
こういった場合、SendMessage を使う方法を説明する。
#define WM_USER_MESSAGE_ID (WM_USER + ***) // 独自のメッセージID // ワーカスレッド UINT _cdecl thread(LPVOID pParam) { // UI を操作する AfxGetApp()->m_pMainWnd->SendMessage(WM_USER_MESSAGE_ID, *, *L); return 0; } ON_MESSAGE(WM_USER_MESSAGE_ID, OnUserMessage) // メッセージを受信 LRESULT ***::OnUserMessage(WPARAM wpara, LPARAM lpara) { // UI を操作する return 0; }