Я звоню HwndSource.AddHook()
, чтобы получить сообщения для обработки в моем окне WPF. Интересно, нужно ли мне вызывать HwndSource.RemoveHook()
, когда окно уничтожено - это окно не MainWindow. Если так, то каково правильное место для его вызова (Closing()
)? Кажется, что крючки удаляются, когда окно разрушено.
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
source.AddHook(WndProc);
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (NativeMethods.UWM_SHOWMYAPP == msg)
{
if (this.WindowState == WindowState.Minimized)
this.WindowState = WindowState.Normal;
this.Activate();
handled = true;
}
return IntPtr.Zero;
}
void StatusWindow_Closing(object sender, CancelEventArgs e)
{
HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
source.RemoveHook(WndProc);
}
Здесь при удалении я снова получаю HwndSource
. Это нормально? или я должен оставить объект source
, используемый для Add()
, и использовать его для Remove()
?