/// <summary>
 /// マウス カーソルの位置とウィンドウ位置およびサイズとを比較し、マウス カーソルがウィンドウ上にあるかを判断する。
 /// </summary>
 /// <param name="cursorPos">マウス カーソル位置</param>
 /// <param name="winPosSize">ウィンドウ位置およびサイズ</param>
 /// <returns>ウィンドウ上なら true。それ以外の場合は false。</returns>
 private static bool OnWindow(System.Drawing.Point cursorPos, WindowPosAndSize winPosSize)
 {
     return(!(
                cursorPos.X < winPosSize.Left ||
                cursorPos.Y < winPosSize.Top ||
                cursorPos.X > winPosSize.Left + winPosSize.Width ||
                cursorPos.Y > winPosSize.Top + winPosSize.Height));
 }
        /// <summary>
        /// MainWindows で MouseEnter イベントが発生した際のイベント ハンドラー
        /// マウス ホバー時にウィンドウを消す。
        /// </summary>
        /// <param name="sender">イベントの発生元</param>
        /// <param name="e">マウス イベント引数</param>
        private async void MainWindow_MouseEnter(object sender, MouseEventArgs e)
        {
            this.Visibility = Visibility.Hidden;
            var winPosSize = new WindowPosAndSize()
            {
                Left   = this.Left,
                Top    = this.Top,
                Width  = this.Width,
                Height = this.Height
            };

            var task = new Task <Visibility>((x) => {
                WaitMouseLeave(x);
                return(Visibility.Visible);
            }, winPosSize);

            task.Start();


            this.Visibility = await task;

            return;
        }