我想将经过的时间(分钟)添加到GUI并并行执行其他操作。
我尝试的所有方法均未成功,但仍然存在于我的GUI中。我添加示例:
namespace Backgrondworker
{
public partial class Form1 : Form
{
int aa = 0;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
progressBar1.Value = 0;
progressBar1.Maximum = 10;
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for(int i =1;i<=10;i++)
{
Thread.Sleep(1000);
backgroundWorker1.ReportProgress(0);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value += 1;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("completed");
}
}
}
答案 0 :(得分:1)
您应该执行以下操作
答案 1 :(得分:0)
您将0
放入了ReportProgress
:
backgroundWorker1.ReportProgress(0);
将此更改为:
int percent = (int)Math.Round((i * 100.0) / 10);
backgroundWorker1.ReportProgress(percent);
除以10
可以使您完成工作的一部分(您在循环中计算10
次),再乘以100
可以得到百分比。
答案 2 :(得分:0)
我解释: 公共局部类Form1:表单 {
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Task.Run(() =>
{
for (int i = 1; i <= 10; i++)
{
Thread.Sleep(1000);
label2.Text = i.ToString();
}
});
Task.Run(() =>
{
for (int i = 1; i <= 10; i++)
{
Thread.Sleep(1000);
label3.Text = i.ToString();
}
});
}
}
got:System.InvalidOperationException:“跨线程操作无效:控制从不是在其上创建线程的线程访问的'label3'。”