我正在使用 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();
}
但是有了这个我或多或少有同样的问题,离开该区域后检查它仍然返回true,rec.Contains(point)
仅在一秒钟后他将执行if代码,但有时他会立即得到它。
第二个问题是我在方法的this.Close();
行中遇到了线程异常checkPost()
:
跨线程操作无效:控件“MyForm”从创建它的线程以外的线程访问。
现在我真的不知道如何以另一种方式实现鼠标离开部分。