我正在创建一个机器人,只要计时器运行,它就可以执行鼠标单击操作,但不能超过此时间。就像leftmouseclick相比,它应该做387ms /发送垃圾邮件rightmouseclick并在每次两次rightmouseclick之间等待10ms
现在,我正在寻找一种方法来在循环中执行/发送rightmouseclick几毫秒的垃圾邮件(而不是间隔!)。
赞:
for(387ms)
{
doSomething(); // doSomething() is rightmouseclick in my case
wait(10ms);
}
doSomething()在387ms的时间范围内尽可能地被执行,而wait(10ms)应该不会影响剩余时间,就像我认为使用Thread.Sleep(10)
答案 0 :(得分:0)
我想这是更合适的选择,您可以调用下面的函数来获取所需的内容。
public void TimerLoop(int ms)
{
var now = DateTime.Now;
while(DateTime.Now < now.AddMilliseconds(ms))
{
//do your stuff here
}
}
答案 1 :(得分:-1)
这里有两种方法TimeLoop
和TimeLoopAsync
,它们将以特定的延迟在特定的时间量内循环操作。从中获得所需的东西,但它将满足您的需求。
using System;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApp3
{
class Program
{
static async Task Main(string[] args)
{
const int TotalTimeMS = 200;
const int DelayMS = 10;
TimeLoop(() =>
{
Console.WriteLine($"First {DateTime.Now.Ticks}");
}, TotalTimeMS, DelayMS);
await TimeLoopAsync(() =>
{
Console.WriteLine($"Second {DateTime.Now.Ticks}");
}, TotalTimeMS, DelayMS);
Console.WriteLine("Done");
Console.ReadKey();
}
public static void TimeLoop(Action action, int totalTime, int delay)
{
var futureTime = DateTime.Now.AddMilliseconds(totalTime);
while (futureTime > DateTime.Now)
{
action.Invoke();
Thread.Sleep(delay);
}
}
public static async Task TimeLoopAsync(Action action, int totalTime, int delay)
{
var futureTime = DateTime.Now.AddMilliseconds(totalTime);
while (futureTime > DateTime.Now)
{
action.Invoke();
await Task.Delay(delay);
}
}
}
}
//OUTPUTS
//First 636813466330097482
//First 636813466330207562
//First 636813466330317509
//First 636813466330427504
//First 636813466330537519
//First 636813466330647498
//First 636813466330757504
//First 636813466330867485
//First 636813466330977501
//First 636813466331087479
//First 636813466331197483
//First 636813466331307522
//First 636813466331417580
//First 636813466331527516
//First 636813466331637533
//First 636813466331747513
//Second 636813466331867481
//Second 636813466332197479
//Second 636813466332317508
//Second 636813466332427498
//Second 636813466332647472
//Second 636813466332757495
//Second 636813466332977526
//Second 636813466333087469
//Second 636813466333197468
//Second 636813466333417483
//Second 636813466333527481
//Second 636813466333757457
//Done