经实验,不用Thread.Sleep(5000); 而是用timer定时可以解决此问题。
可是为什么呢?我对于线程的工作方式不是特别了解。求高人指点一二。

解决方案 »

  1.   

    mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, x1, y1, 0, 0);
    mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN, x1, y1, 0, 0);
    mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP, x1, y1, 0, 0);
    Thread.Sleep(5000);执行到这里,CPU已进入睡眠了,CPU挂起,造成单击延迟了5秒
    MeasureOne();
      

  2.   

    看起来是你发了消息还没执行呢,就sleep了。sleep后,线程就不执行了,也就没法处理消息了。
      

  3.   

    我不知道你单击到底操作什么东西了,如果是单击的外部窗体(外部程序,另一个进程),那么不会出现这样的问题而如果你单击的是自己程序的窗体,你使用了sleep让主线程挂起了,那么即使单击了,界面也不会响应,要等休眠时间到了,才开始响应
    所以其实是5秒之前就已经点了,但是要等到5秒之后才开始执行
      

  4.   

    mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, x1, y1, 0, 0); //这条可以马上执行
    mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN, x1, y1, 0, 0);//下面这两条要等5秒后才会执行
    mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP, x1, y1, 0, 0);现在发现的是第一条鼠标移动的指令可以马上有反应,即鼠标可以马上我要击的按钮上,但是要等5秒后才会点击该按钮。这才是我觉得最奇怪的地方。
    此问题应该是和CPU休眠有关,但休眠时机有点诡异。
    另外,为什么用timer定时器就可以避开此问题?我对timer定时和sleep定时的机理还不了解。