MyDelegate myDelegate = new MyDelegate(UpdateProc);
                myDelegate.BeginInvoke(Counting,netb.MaxValueEx, netb.ProbarEx, netb.LabelEx, null, null);委托过程,这段没反映,加断点就没看到执行        private delegate void MyDelegate(int _vlaue, int _maxVlaue, ProgressBar _prog, Label _lable);        void UpdateProc(int _value, int _maxVlaue, ProgressBar _prog, Label _lable)
        {
            _prog.Maximum = _maxVlaue;
            _prog.Value = _value;
            _lable.Text = _value.ToString() + "/" + _maxVlaue.ToString();
        }但是我换成
MyDelegate myDelegate = new MyDelegate(UpdateProc);
                myDelegate.Invoke(Counting,netb.MaxValueEx, netb.ProbarEx, netb.LabelEx);这样执行就能看到效果,这是为什么
C#delegate

解决方案 »

  1.   

    void UpdateProc(int _value, int _maxVlaue, ProgressBar _prog, Label _lable)        {            
    _prog.Maximum = _maxVlaue;            
    _prog.Value = _value;            
    _lable.Text = _value.ToString() + "/" + _maxVlaue.ToString();        
    }
    在这里加断点,没看到异步执行到这里
      

  2.   

    当然看不到。即使能进去,_lable.Text = _value.ToString() + "/" + _maxVlaue.ToString();        
     也会报错
      

  3.   

    更正一下,设置断点BeginInvoke是可以调试进去的。
    除非之前什么地方有异常。
    _lable是UI线程的控件,如果直接在异步新线程调用会出错。            this.Invoke(new Action(() => {
                    label1.Text = _str;
                }));
      

  4.   

    经过修改是可以进去了,不过是把 主线程的控件赋值=>异步到线程池=>后台线程池再用委拖主线执行,好像没有必要这样异步吧
      

  5.   

      IAsyncResult ar = myDelegate.BeginInvoke(Counting, netb.MaxValueEx, netb.ProbarEx, netb.LabelEx, null, null);
             while (!ar.IsCompleted) Thread.Sleep(10);
    要是这样你应该也能异步进去的,不过是同步等待异步完成。报不报错看你的设置了