閱讀528 返回首頁    go 阿裏雲 go 技術社區[雲棲]


多線程委托回調

 public void updateme()  程序調用這個函數
        {
            lblTime.Text = "正在讀取數據...";
            if (isruning) return;
            isruning = true;
            this.btnDo.Enabled = false;
            lv.Items.Clear();  設置一些數據 , 比如提示或者 按鈕等. 查詢期間是不允許操作的.  
            System.Threading.ThreadPool.QueueUserWorkItem( _updateme  );//請求一個線程池中的線程 , 讓他完成一個操作 這個操作_updateme  .
        }
          public delegate void d_updateme(); 用於回調的委托 .
          public void _updateme(object state )     供給線程調用的函數.
        {
            AsyncCallback ac=new AsyncCallback(updateme_);           創建一個回調 . 回調函數updateme_        
            GetALog gal = new GetALog(BLL.Traffic.GetALog);把要執行的代碼創建到委托裏 .
            IAsyncResult result = gal.BeginInvoke(LogDateTime,  _VDI , ac, gal);         開始執行該委托.  
        }
        public void updateme_(IAsyncResult iar) ///這裏是回答內容.
        {
            GetALog gal = (GetALog)iar.AsyncState;委托轉換 .
            DataTable t = gal.EndInvoke(iar); 調用結束委托方法,取得返回值 .
            this.BeginInvoke(new duupdateme(uupdateme), t); 調用窗體中的uupdateme函數 ,使得使用t值,
           這個地方我沒太注意, 我不知道回調是由窗體線程還是剛才線程池中的線程.
        }
        delegate void duupdateme(DataTable t); //委托 .

        private void uupdateme(DataTable t )
        {
這個函數中就是處理數據的.

}

最後更新:2017-04-02 00:06:24

  上一篇:go Visual Basic.net還是C#
  下一篇:go 狀態對象:數據庫的替代者