MessageLoop + PeekMessage + lukning af form
HejJeg har en c++ dll, der kommunikere til en C# form via beskeder (PostMessageThread og PeekMessage). Mit problem, hvor jeg skal placere koden der rydere op i besked køen, når formen lukkes.
Jeg har forsøgt med at placere kaldet af c++ funktionen i FormClosing og FormClosed. Koden til min form er som følgende:
public frmMain()
{
InitializeComponent();
base.FormClosing += new FormClosingEventHandler(frmMain_FormClosed);
if (wpGrabDll.WPGrabInitDll() == 0)
{
...
}
int t = wpGrabDll.WPGrabSubmitJob("http://localhost/index.html", null); // sender nogle beskeder til besked køen via PostThreadMessage(ownerThreadId, WM_WPGRAB_EVT, (WPARAM) structPointer, (LPARAM) convertState(status)), hvor ownerThreadId = GetCurrentThreadId(); sættes i WPGrabInitDll()
}
FormClosing ser således ud:
private void frmMain_FormClosed(Object sender, FormClosingEventArgs e)
{
if (Application.MessageLoop)
{
MessageBox.Show("fjghjkfshg");
}
wpGrabDll.WPGrabCleanupDll();
}
Besked boksen bliver vist, men
while(PeekMessage(&msg, (HWND) -1, WM_WPGRAB_EVT, WM_WPGRAB_EVT, PM_REMOVE) != 0), returnere ingen beskeder.
Hvis jeg placere WPGrabCleanupDll umildbart efter WPGrabInitDll(), så virker det fint, så de må værre noget med hvornår besked køen lukkes!?!
Nogen ideer?