どうすればフックを正しく止めることができますか?フックが原因で、アプリケーションを正しく閉じることができません。
コードビハインド:
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
IntPtr windowHandle = (new WindowInteropHelper(this)).Handle;
HwndSource src = HwndSource.FromHwnd(windowHandle);
src.AddHook(new HwndSourceHook(WndProc));
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
// Handle WM_DEVICECHANGE
if (msg == 0x0219)
{
RunService();
}
私は以下のようなものを書きましたが、それはアプリケーションを適切に停止しません:
private void StopHook()
{
IntPtr windowHandle = (new WindowInteropHelper(this)).Handle;
HwndSource src = HwndSource.FromHwnd(windowHandle);
src.RemoveHook(new HwndSourceHook(this.WndProc));
}
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
base.OnClosing(e);
StopService(); // to clear thread
StopHook();
}
更新しました:
RunServiceが問題の原因だと思いますが、StopServiceを使用してすべてのスレッドを閉じています。