PostMessage aus WorkerThread zu Main-Fenster in MFC

Ich habe eine MFC-Anwendung, die ein worker-thread, was ich will zu tun ist, um post-Meldung aus worker-thread auf die GUI-thread zu aktualisieren, einige status-Meldungen auf der GUI. Was ich bisher getan habe ist Registered a new window message

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

Hinzugefügt, die diese Nachricht an die message-map der dialog-Klasse

ON_MESSAGE(FTP_APP_STATUS_UPDATE, &CMFC_TestApplicationDlg::OnStatusUpdate)

Den Prototyp OnStatusUpdate ist

afx_msg LRESULT OnStatusUpdate(WPARAM, LPARAM);

und definition ist

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

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

- und die worker-thread-Aufruf-code ist

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

    AfxBeginThread(FTPConnectThread,&params);
}

- und Worker-thread-code ist

//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;
}

das problem ist, wenn die PostMessage-Funktion aufgerufen, die OnStatusUpdate genannt werden sollte, aber es wird nicht aufgerufen, keine Ausnahme oder assertion geworfen wird, Was mache ich falsch? Ich habe versucht ON_REGISTERED_MESSAGE und ON_MESSAGE aber keinen Erfolg, keine Hilfe?

InformationsquelleAutor Muhammad Ummar | 2012-05-23

Schreibe einen Kommentar