Я учусь использовать потоки и делаю демонстрацию многопоточности.
У меня есть метка с именем lblText и бегущий индикатор выполнения с именем pgbRun. . Я создаю 2 потока, один из которых позволяет изменять текст метки после каждого вызова Thread.Sleep()
, другой позволяет индикатору выполнения показывать анимацию при изменении текста метки.
Проблема, с которой я столкнулся, заключается в том, что поток изменения текста работает хорошо, но в потоке индикатора выполнения что-то не так. pgbRun просто начинает анимацию после изменения текста.
Пожалуйста, помогите мне найти ошибку в моем коде и покажите, как это исправить. Большое спасибо!
private delegate void formDelegate();
private void btnRun_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(new formDelegate(textChange)));
thread.IsBackground = true;
thread.Start();
}
public void textChange()
{
if (lblText.InvokeRequired)
{
lblText.BeginInvoke(new formDelegate(textChange));
}
else
{
Thread thread = new Thread(new ThreadStart(new formDelegate(progess)));
thread.IsBackground = true;
thread.Start();
//I try make single thread that config progress bar here but i have same trouble.
for (int i = 0; i < 10; i++)
{
lblText.Text = "Count: " + i;
lblText.Update();
lblText.Refresh();
Thread.Sleep(300);
}
}
}
public void progess()
{
if (pgbRun.InvokeRequired)
{
pgbRun.BeginInvoke(new formDelegate(progess));
}
else
{
pgbRun.Style = ProgressBarStyle.Marquee;
pgbRun.MarqueeAnimationSpeed = 20;
pgbRun.Update();
pgbRun.Refresh();
}
}