Timer.Interval - mimo, że je zmieniam ciągle wynosi 200ms

0

Piszę krótki program, który ma imitować wciskanie dwóch kombinacji klawiszy na klawiaturze. Przerwa między każdą kombinacją musi być losowa w przedziale od 20 do 100 ms. Problem w tym, że liczba losuje się prawidłowo, wartość Interval timera się zmienia(widzę to w trybie Step Into) a odstępy między kliknięciami mimo wszystko ciągle wynoszą równo 200 milisekund. Oto kawałki kodu:

 private void Wait(object sender, EventArgs e) /*obsługuje kliknięcie przycisku rozpoczynającego procedurę*/
        {
            RandomGenerate();
            if (comboBox1.SelectedIndex == 0)
            {
                outputCombination1 = "^{TAB}";
            }
            if (comboBox1.SelectedIndex == 1)
            {
                outputCombination1 = " ";
            }
            if (comboBox2.SelectedIndex == 0)
            {
                outputCombination2 = "^{TAB}";
            }
            if (comboBox2.SelectedIndex == 1)
            {
                outputCombination2 = " ";
            }
            wait.Interval = Convert.ToInt32(numericUpDown4.Value) * 1000; /* ten timer odmierza czas między kliknięciem przez użytkownika przycisku a rozpoczęciem procedury */
            wait.Tick += new EventHandler(StartTimer);
            wait.Start();
        }

        private void RandomGenerate()
        {
            if (radioButton2.Checked == true)
            {
                Random random = new Random();
                breakTime = Convert.ToInt32(random.Next(Convert.ToInt32(numericUpDown2.Value), Convert.ToInt32(numericUpDown1.Value)));
            }
            else if (radioButton2.Checked == false)
            {
                breakTime = Convert.ToInt32(numericUpDown3.Value);
            }
        }
        void Input(object sender, EventArgs e)
        {
            if (counter < numericUpDown5.Value * 2)
            {
                if (currentCombination == 1)
                {
                    SendKeys.Send(outputCombination1);
                    currentCombination = 2;
                }
                else if (currentCombination == 2)
                {
                    SendKeys.Send(outputCombination2);
                    currentCombination = 1;
                }
                counter++;
                RandomGenerate();
                breaking.Interval = breakTime;
            }
            else
            {
                breaking.Stop();
                write.Close();
                write2.Close();
                return;
            }
        }
        void StartTimer(object sender, EventArgs e)
        {
            wait.Stop();
            breaking.Interval = breakTime;
            breaking.Tick += new EventHandler(Input);
            breaking.Start();
        } 

Mimo, iż breaking.Interval za każdą kombinacją przyjmuje inną wartość losową, to poszczególne kombinacje wciskane są równo co 200 milisekund. Dlaczego?

0

Skąd wiesz, że to zawsze jest akurat 200ms? Jak to mierzysz. Dodatkowo Timer ma stosunkowo dużą minimalną dokładność i jest to 55ms oraz nie ma gwarancji, że odpali się zawsze dokładnie po podanym czasie.

0

Program służy mi do szybkiego wysyłania ataków w grze Plemiona.pl. Po odpaleniu całej sekwencji mogę tam zobaczyć, jak poszły te ataki i między jednym a drugim zawsze jest 200 milisekund odstępu.

EDIT. Sorry, mała pomyłka. Właśnie przeczytałem na forum tej gry że między atakami minimalny odstęp wynosi właśnie 200 milisekund. Więc program działa poprawnie. Przepraszam za zamieszanie. Temat można zamknąć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1