Ich habe eine MFC-Anwendung, die einen Arbeitsthread hat, was ich tun möchte, ist Nachricht von Worker-Thread an den GUI-Hauptthread zu aktualisieren einige Statusmeldungen auf GUI. Was ich bisher getan ist Registered a new window message
PostMessage von WorkerThread zum Hauptfenster in MFC
//custom messages
static UINT FTP_APP_STATUS_UPDATE = ::RegisterWindowMessageA("FTP_APP_STATUS_UPDATE");
hinzugefügt Diese Nachricht auf die Nachricht Karte von Dialogklasse
ON_MESSAGE(FTP_APP_STATUS_UPDATE, &CMFC_TestApplicationDlg::OnStatusUpdate)
Der 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 der Arbeiter-Thread ruft 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,¶ms);
}
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 der OnStatusUpdate
genannt wird aufgerufen werden soll, aber es wird nicht aufgerufen wird, keine Ausnahme oder Behauptung wird geworfen, Was mache ich falsch? Ich habe versucht ON_REGISTERED_MESSAGE
und ON_MESSAGE
aber keinen Erfolg, keine Hilfe?
Vielen Dank für Ihre Hilfe, Ihr Code mit einer geringfügigen Änderung gearbeitet, es funktionierte, als ich es verwendet mit 'ON_REGISTERED_MESSAGE' –