Я использую событие MouseLeave, чтобы проверить, если пользователь оставил свою форму и закрыть свое окно, но с использованием this.MouseLeave += new System.EventHandler(this.InvisibleForm_Leave);
слишком медленно, только если я буду оставить свою форму медленно событие запускается, перемещая его обычным способом/немного быстрее. Я не получаю событие отпуска.MouseLeave EventHandler слишком медленно
Поэтому я попытался проверить на моем собственном, если мышь оставила свою форму или нет:
private void checkPos()
{
Rectangle rec = this.Bounds;
while (true)
{
Point point = new Point(Cursor.Position.X, Cursor.Position.Y);
if (!rec.Contains(point))
{
Console.WriteLine("leaving");
this.Close();
}
Thread.Sleep(100);
}
}
начал в собственном потоке после создания формы:
public MyForm()
{
InitializeComponent();
Thread m_mouseListenerThread = new Thread(new ThreadStart(this.checkPos));
m_mouseListenerThread.Start();
}
Но с этим у меня есть более или менее та же проблема, оставив область по-прежнему возвращает true после проверки ее rec.Contains(point)
только после того, как он выполнит код if, но иногда он получает его в одно мгновение.
Вторая проблема состоит в том, что я получаю исключение нить в this.Close();
линии в checkPost()
метода:
операции кросс-нить не действует: Control «MyForm» доступ из потока, отличного поток, на котором он был создан.
Теперь я действительно не знаю, как реализовать мышь, оставляя часть по-другому.
Причина может быть медленным, является 'Thread.Sleep (500),' не поймать мышь в этот период времени –
у меня было это на 100 мс, 500 мс было только для проверки – dontcare
возможного дубликата [Затухание и исчезновение формы] (http://stackoverflow.com/questions/2927955/fading-in-and- fading-out-for-a-form) –