У меня есть приложение, которое использует один цикл для ввода текста в промежутки времени. Теперь я хочу, чтобы текст вводился с небольшими пробелами между каждым символом.Как запустить таймер внутри таймера?
Я пробовал этот код, но когда я запускаю таймеры, набирание продолжается во втором таймере. В моем первом случае нет пробелов, которые приурочили мои строки.
private List<char> charList = new List<char>();
public AutoTyper()
{
InitializeComponent();
tmrInterval.Tick += new EventHandler(Interval);
tmrDelay.Tick += new EventHandler(Delay);
tmrSpace.Tick +=new EventHandler(charSpaces);
txtText.TextChanged += new EventHandler(TextChanged);
tbType.SelectedIndexChanged += new EventHandler(IndexChanged);
}
private void Interval(object sender, EventArgs e)
{
if (cbPause.Checked == false)
{
SendKeys.Send(txtText.Text + "{enter}");
if (tbType.SelectedTab == tbInterval)
{
tmrInterval.Interval = int.Parse(nudInterval.Value.ToString());
}
if (tbType.SelectedTab == tbRange)
{
tmrInterval.Interval = random.Next(int.Parse(nudMin.Value.ToString()), int.Parse(nudMax.Value.ToString()));
}
}
else if (cbPause.Checked == true)
{
tmrSpace.Enabled = true;
}
}
private void charSpaces(object sender, EventArgs e)
{
Random random = new Random();
tmrSpace.Interval = random.Next(200, 400);
foreach (char character in charList)
SendKeys.Send(character.ToString());
SendKeys.Send("{enter}");
}
Редактировать, я попытался использовать версию спящего потока, поэтому я удалил время. Все, что у меня есть, идет, но он останавливает мой компьютер.
private void Interval(object sender, EventArgs e)
{
if (cbPause.Checked == false)
{
SendKeys.Send(txtText.Text + "{enter}");
if (tbType.SelectedTab == tbInterval)
{
tmrInterval.Interval = int.Parse(nudInterval.Value.ToString());
}
if (tbType.SelectedTab == tbRange)
{
tmrInterval.Interval = random.Next(
int.Parse(nudMin.Value.ToString()),
int.Parse(nudMax.Value.ToString()));
}
}
else if (cbPause.Checked == true)
{
Random random = new Random();
foreach (char character in charList)
{
SendKeys.Send(character.ToString());
Thread.Sleep(random.Next(400, 500));
}
SendKeys.Send("{enter}");
}
}
Есть некоторые, кто будет использовать любое использование Thread.Sleep(). Тем не менее, я использовал его много раз, и мир не смог закончиться. –
Не вижу, что проблема с таймером. Возможно, проголосовавший должен прокомментировать. Тем временем, однако ... +1! –
@Norla: Таймеры обычно используются асинхронно. В этом случае требование является синхронной задержкой. Использование таймера для прерывания процесса таким образом кажется слишком сложным для меня. (И, очевидно, это было слишком сложно для ОП, потому что его/ее код - беспорядок, который явно не сработает!) –