多线程异步更新UI

    技术2022-05-19  20

    //用于更新UI的委托public delegate void UpdateControl(object objarr, object obj2);//以上委托的实现函数之一private void UpdateControl_Method(object objarr,object obj2){//if (objarr.Length < 2) { return; }Label lbl = (Label)(objarr);lbl.Text = obj2.ToString();}UpdateControl dlupdlbl;private string DoAsync(int a, int b){for (int i = 0; i < 13999; i++){a++;b++;label2.BeginInvoke(dlupdlbl, new object[] { label2, b });Thread.Sleep(1);}return a.ToString() + " -- " + b.ToString();}//DoAsync 的委托包装delegate string dl_DoAsync(int a, int b);private void MyCallBackMethod(IAsyncResult ar){dl_DoAsync dl_do = (dl_DoAsync)ar.AsyncState;string vlu = dl_do.EndInvoke(ar);MessageBox.Show("OK, CallBackMedthod Do This");}private void button3_Click(object sender, EventArgs e){try{//更新UI的委托dlupdlbl = new UpdateControl(UpdateControl_Method);//需要做异步操作的任务代码执行体dl_DoAsync dl_doThings = new dl_DoAsync(DoAsync);//异步完成后的回调函数AsyncCallback callbak = new AsyncCallback(MyCallBackMethod);//OK ,让我们开始异步吧dl_doThings.BeginInvoke(0, 0, callbak, dl_doThings);}catch (Exception ex){MessageBox.Show(ex.ToString());}}


    最新回复(0)