C#同步、異步編程


    
同步編程
public partial class Form1 : Form { public Form1() { InitializeComponent(); } //同步執行 private void btnExcu_Click(object sender, EventArgs e) { lab1.Text = add(10,10).ToString(); lab2.Text = jianf(10, 10).ToString(); } private int add(int a,int b) { return a + b; } private int jianf(int a,int b) { //調用thread類中的Sleep()方法來給方法2延遲5000毫秒 System.Threading.Thread.Sleep(5000); return a * b; }

效果如下:

  

代碼分析:

    當我點擊同步顯示的時候,由於方法2延遲了5000毫秒,所有label1和label2會等待5000毫秒后在一同顯示,其他的按鈕點之沒有反應。

 

 

   異步顯示

 public partial class Form1 : Form
    {
        //【1】定義委托
        public delegate int adddelegate(int a,int b);
        public Form1()
        {
            InitializeComponent();
        }

        //同步執行
        private void btnExcu_Click(object sender, EventArgs e)
        {
            lab1.Text = add(10,10).ToString();
            lab2.Text = jianf(10, 10).ToString();
        }
        //【2】根據委托定義委托方法
        private int add(int a,int b)
        {
            return a + b;
                 
        }

        private int  jianf(int a,int b)
        {
            //調用thread類中的Sleep()方法來給方法2延遲5000毫秒
            System.Threading.Thread.Sleep(5000);
            return a * b;

        }

        //【3】異步調用
        private void btnExcu2_Click(object sender, EventArgs e)
        {
            //通過委托異步調用方法
            //委托類型的BeginInvoke(輸入和輸出變量)
            //第一個參數10 表示委托方法的實參。
            //第二個參數Callback:回調函數,表示異步調用后自動調用的函數
            //第三個參數AsyncState:用戶向回調函數提供參數信息
            //返回值:IAsyncResult:異步操作狀態接口,封裝了異步執行的參數

            //創建委托變量,並指向方法
            adddelegate my = jianf;     
            //異步調用任務  需要用到接口IAsyncResult
            IAsyncResult resul = my.BeginInvoke(10,10,null,null);
            this.lab1.Text = "正在計算,請稍等...";

            //同時執行其他任務
            this.lab2.Text = add(10,10).ToString();
            //獲取異步執行的結果  EndInvoke返回一個int類型 參數是接口
            //委托類型的EndInvoke()方法:借助於IAsyncResult接口對象,不斷的查詢異步調用是否結束。
            int re= my.EndInvoke(resul);
            this.lab1.Text = re.ToString();

        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM