2

どうすればフックを正しく止めることができますか?フックが原因で、アプリケーションを正しく閉じることができません。

コードビハインド:

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を使用してすべてのスレッドを閉じています。

4

0 に答える 0