我有以下代碼以異步方式更新進度欄,我注意到 它通過調用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