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
_prog.Maximum = _maxVlaue;
_prog.Value = _value;
_lable.Text = _value.ToString() + "/" + _maxVlaue.ToString();
}
在这里加断点,没看到异步执行到这里
也会报错
除非之前什么地方有异常。
_lable是UI线程的控件,如果直接在异步新线程调用会出错。 this.Invoke(new Action(() => {
label1.Text = _str;
}));
while (!ar.IsCompleted) Thread.Sleep(10);
要是这样你应该也能异步进去的,不过是同步等待异步完成。报不报错看你的设置了