Ho un'applicazione MFC, che ha un thread di lavoro, quello che voglio fare è inviare un messaggio dal thread di lavoro al thread della GUI principale per aggiornare alcuni messaggi di stato sulla GUI. Quello che ho fatto finora è Registered a new window message
PostMessage da WorkerThread alla finestra principale in MFC
//custom messages
static UINT FTP_APP_STATUS_UPDATE = ::RegisterWindowMessageA("FTP_APP_STATUS_UPDATE");
Aggiunto questo messaggio alla mappa di messaggi di classe finestra
ON_MESSAGE(FTP_APP_STATUS_UPDATE, &CMFC_TestApplicationDlg::OnStatusUpdate)
Il prototipo di OnStatusUpdate
è
afx_msg LRESULT OnStatusUpdate(WPARAM, LPARAM);
e definizione è
LRESULT CMFC_TestApplicationDlg::OnStatusUpdate(WPARAM wParam, LPARAM lParam)
{
//This function is not called at all.
return 0;
}
e il codice thread di lavoro chiamando è
void CMFC_TestApplicationDlg::OnBnClickedMfcbutton1()
{
ThreadParams params;
params.m_hWnd = m_hWnd;
params.FTPHost = "test_host";
params.FTPUsername = "test";
params.FTPPassword = "test";
AfxBeginThread(FTPConnectThread,¶ms);
}
e il codice di filo lavoratore è
//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;
}
il problema è quando la funzione PostMessage è chiamato il OnStatusUpdate
dovrebbe essere chiamato, ma non viene chiamato, nessuna eccezione o asserzione è stata lanciata, cosa sto facendo male? Ho provato ON_REGISTERED_MESSAGE
e ON_MESSAGE
ma nessun successo, alcun aiuto?
Grazie mille per il vostro aiuto, il vostro codice con una piccola modifica lavorato, ha funzionato quando l'ho usato con 'ON_REGISTERED_MESSAGE' –