我只想在按钮点击时同时增加两个进度条;我创建了两个进度条和一个按钮start
,其中包含两个线程t1和t2,每个线程包含不同的方法,以便递增两个进度条的值(分别为progressbar1的t1和progressbar2的t2)。
我拥有的控件: 进度条:progressbar1,progressbar2 和按钮1。
代码如下:
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);
}
在运行时,它显示以下错误:
错误名称= InvalidOperationException 错误消息=跨线程操作无效:控制&#39; progressBar2&#39;从创建它的线程以外的线程访问。
请帮我解决这个问题。我对线程概念的想法较少,我已经完成了这个解决方案而没有在我的问题上取得进展:
答案 0 :(得分:0)
在您编写的以新线程开始的方法中,您直接调用进度条,因此您尝试编辑另一个(原始)线程的数据。你不应该直接编辑进度条的值,而应Invoke
这样做的方法,如下所示:
for (int j = 0; j <= 100; j++)
this.progressBar1.Invoke((Action) () => this.progressBar1.Value = j, null);