C#-同时递增两个进度条(多线程)
我只想两个进度条同时增加一个按钮点击;我创建了两个进度条和一个按钮C#-同时递增两个进度条(多线程),c#,multithreading,C#,Multithreading,我只想两个进度条同时增加一个按钮点击;我创建了两个进度条和一个按钮start,其中两个线程t1和t2分别包含不同的方法,以增加两个进度条的值(t1分别用于progressbar1和t2分别用于progressbar2) 我有: 进度条:进度条1、进度条2 和按钮1 代码如下: Thread t1, t2; private void Progressor1() { progressBar1.Minimum = 0; progressBar1.
start
,其中两个线程t1和t2分别包含不同的方法,以增加两个进度条的值(t1分别用于progressbar1和t2分别用于progressbar2)
我有:
进度条:进度条1、进度条2
和按钮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);
}
线程t1、t2;
私有无效进程1()
{
progressBar1.最小值=0;
progressBar1.最大值=100;
对于(int i=0;i,在您编写的作为新线程启动的方法中,您直接调用进度条,因此您试图编辑来自另一个(原始)线程的数据。您不应该直接编辑进度条的值,而应该调用
这样做的方法:
for (int j = 0; j <= 100; j++)
this.progressBar1.Invoke((Action) () => this.progressBar1.Value = j, null);
for(int j=0;j this.progressBar1.Value=j,null);
正如链接问题中所解释的,您不能从其他线程访问UI元素。您的目标不清楚-您的线程目前没有意义。您应该在后台线程上工作,并在UI线程上更新UI。我还想看看TPL/async/await-您不应该直接使用线程
。如果我是将线程作为后台线程解决我的问题吗?@ZakiMohammed否。你的问题是,你是从UI线程以外的线程访问UI-解决这一问题实际上取决于你实际尝试做什么-你的代码没有任何意义。在发布任务之前,你是否尝试搜索“跨线程操作无效”ion?@CharleMager-对线程概念有问题的人通常在理解哪段代码在哪个线程上下文中运行方面有问题。他们通常错误地认为在主线程中创建的类实例的回调\u/\ u委托\u/\ u方法将在GUI线程中运行“因为代码在那里”.我认为这个案子就是一个很好的例子。