Цикл C # для x миллисекунд - PullRequest
       0

Цикл C # для x миллисекунд

0 голосов
/ 25 декабря 2018

Я создаю бота, который будет выполнять щелчки мышью, пока работает таймер, но не дольше, чем этот.Подобно leftmouseclick, чем для 387 мс, он должен сделать / spam rightmouseclick и ждать 10 мс между каждым щелчком rightmouseclick

Теперь я ищу способ сделать / spam rightmouseclick в цикле в течение нескольких миллисекунд (не в интервале!).

Как:

for(387ms)
{
   doSomething(); // doSomething() is rightmouseclick in my case
   wait(10ms);
}

Где doSomething () максимально выполняется в течение 387 мс, а ожидание (10 мс) не должно влиять на оставшееся время, как я думаюбудет при использовании Thread.Sleep(10)

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Полагаю, для этого больше подходит, и вы можете вызвать функцию ниже, чтобы получить то, что вы хотите.

    public void TimerLoop(int ms)
    {
        var now = DateTime.Now; 
        while(DateTime.Now < now.AddMilliseconds(ms))
        {   
        //do your stuff here
        }
    }
0 голосов
/ 25 декабря 2018

Вот два метода, 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...