我使用MouseLeave事件,以检查用户是否离开了我的形式,并关闭我的窗口,但使用 this.MouseLeave += new System.EventHandler(this.InvisibleForm_Leave);
太慢,只有当我要离开我的形式缓慢事件被解雇,以正常方式移动/更快一点我没有得到假期事件。鼠标离开事件处理程序太慢
所以我想检查我自己当鼠标离开了我的形式或不:
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();
}
但是有了这个,我有或多或少同样的问题,离开该地区唯一的一秒钟之后仍然返回与rec.Contains(point)
检查之后真他打算如果代码来执行的,但有时他得到它在瞬间。
这个第二个问题是,我得到一个线程异常的this.Close();
线在checkPost()
方法:
跨线程操作无效:控制'MyForm的距离比其他线程访问它创建的线程。
现在我真的不知道如何实现鼠标以其他方式留下部分。
它可能是缓慢的原因是'Thread.sleep代码(500);'不赶你的鼠标在那段时间内 – 2012-04-20 11:42:43
我有它为100ms,500ms的所述仅为测试[淡入淡出为表单]的 – dontcare 2012-04-20 11:45:03
可能重复(http://stackoverflow.com/questions/2927955/fading-in-and-淡出换一个形式) – 2012-04-20 11:59:53