我有以下代码以异步方式更新进度栏,我注意到 它通过调用MessageBox的异步行为。在这种情况下,它完美地工作 ,但是当我给睡眠1s(1000) MessageBox不会弹出,并且完整的进度条一次填充。 请告诉您为什么会发生这种情况。异步行为
private void button1_Click(object sender, EventArgs e)
{
Update_Async async = new Update_Async(Update_Async_method);
progressBar1.BeginInvoke(async,10);
MessageBox.Show("Updation In Progress");
}
public void Update_Async_method(int a)
{
this.progressBar1.Maximum = a;
for (int i = 1; i <= a; i++)
{
progressBar1.Value = a;
Thread.Sleep(10);
//Thread.Sleep(1000);
}
}
尝试'progressBar1.value =我'不是一个。如果将其设置为a,则将其设置为完成。 – Codeguy007
那么,哪个位异步发生,即在另一个线程上?当您在控件上调用'BeginInvoke'时,将在主GUI线程上调用代码。主GUI线程是'Click'事件处理程序已经运行的地方。因此,没有异步性。 – Jodrell
那么,为什么我们有BeginInvoke On Controls.Please精心制作 – user1512186