PostMessage из WorkerThread в главное окно MFC

У меня есть приложение MFC, в котором есть рабочий поток, и я хочу отправить сообщение из рабочего потока в основной поток графического интерфейса, чтобы обновить некоторые сообщения о состоянии в графическом интерфейсе. То, что я сделал до сих пор, этоRegistered a new window message

//custom messages
static UINT FTP_APP_STATUS_UPDATE = ::RegisterWindowMessageA("FTP_APP_STATUS_UPDATE");

Добавлено это сообщение в карту сообщений диалогового класса

ON_MESSAGE(FTP_APP_STATUS_UPDATE, &CMFC_TestApplicationDlg::OnStatusUpdate)

Прототипом OnStatusUpdateявляется

afx_msg LRESULT OnStatusUpdate(WPARAM, LPARAM);

. и определение

LRESULT CMFC_TestApplicationDlg::OnStatusUpdate(WPARAM wParam, LPARAM lParam)
{

     //This function is not called at all.
     return 0;
}

и код вызова рабочего потока

void CMFC_TestApplicationDlg::OnBnClickedMfcbutton1()
{
    ThreadParams params;
    params.m_hWnd = m_hWnd;
    params.FTPHost = "test_host";
    params.FTPUsername = "test";
    params.FTPPassword = "test";

    AfxBeginThread(FTPConnectThread,&params);
}

и код рабочего потока

//child thread function
UINT FTPConnectThread( LPVOID pParam )
{
    if(pParam == NULL)
    {
        return 0;
    }
    ThreadParams *params = (ThreadParams*)pParam;
    OutputDebugString(params->FTPHost);
    Sleep(4000); //simulating a network call
    CString * message = new CString("Conencted");
    PostMessage(params->m_hWnd,FTP_APP_STATUS_UPDATE,0,(LPARAM)message);
    //PostMessage do nothing? what I am doing wrong?
    return 1;
}

проблема в том, что когда вызывается функция PostMessage, должна быть вызвана OnStatusUpdate, но она не вызывается, исключение или утверждение не выдается. Что я делаю неправильно? Я пробовал ON_REGISTERED_MESSAGEи ON_MESSAGE, но безуспешно,любая помощь?

7
задан Benjamin 9 December 2013 в 13:08
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: