Я просто хочу, чтобы два индикатора выполнения одновременно увеличивались при нажатии кнопки; я создал два индикатора выполнения и одну кнопку start
с двумя потоками t1 и t2, каждый из которых содержит различный метод для увеличения значений двух индикаторов выполнения (t1 для progressbar1 и t2 для progressbar2 соответственно).C# - Одновременно добавляется два индикатора хода (Mutithreading)
Элементы управления У меня есть: Прогресс Бары: progressbar1, progressbar2 и Button button1.
Код выглядит следующим образом:
Thread t1, t2;
private void Progressor1()
{
progressBar1.Minimum = 0;
progressBar1.Maximum = 100;
for (int i = 0; i <= 100; i++)
progressBar1.Value = i;
}
private void Progressor2()
{
progressBar2.Minimum = 0;
progressBar2.Maximum = 100;
for (int j = 0; j <= 100; j++)
progressBar2.Value = j;
}
private void button1_Click(object sender, EventArgs e) // Start Button
{
t1.Start();
t2.Start();
}
private void MultiThreadedcs_Load(object sender, EventArgs e)// Form Load
{
t1 = new Thread(Progressor1);
t2 = new Thread(Progressor2);
}
Во время выполнения он показывает мне следующее сообщение об ошибке:
Error Name = InvalidOperationException Error Message = Cross-thread operation not valid: Control 'progressBar2' accessed from a thread other than the thread it was created on.
Пожалуйста, помогите мне с этим. У меня меньше идеи резьб понятий, я прошел через этот раствор, без прогресса в моей проблеме:
c# threading access to other thread
Как объяснено в связанном вопросе, вы не можете получить доступ к элементам пользовательского интерфейса из других потоков. Неясно, какова ваша цель - в ваших потоках сейчас нет смысла. Вы должны делать * работу * в фоновом потоке и обновлять пользовательский интерфейс в потоке пользовательского интерфейса. Я также посмотрел бы на TPL/async/await - вы не должны использовать 'Thread' напрямую. –
Если я создаю темы в качестве фоновой темы, это решает мою проблему? –
@ ZakiMohammed No. Ваша проблема в том, что вы получаете доступ к пользовательскому интерфейсу из потоков, отличных от потока пользовательского интерфейса. Решение этого действительно зависит от того, что вы на самом деле пытаетесь сделать - ваш код на самом деле не имеет никакого смысла. – Luaan