C#多个委托调用多个方法(优先级?)
定义了2个委托,一个用线程启动,一个用backgroundworker启动,为什么我用线程启动的委托刚开始只执行了一遍,等到用backgroundworker启动的委托执行完成后才会继续执行线程的委托?这个难道还有什么优先级?
- C# code
private int i = 0;private delegate void InvokeLabel();private delegate void InvokeMainForm();private void Form_Load(object sender, EventArgs e){ Thread setLabelTextThread = new Thread(setLabelText); setLabelTextThread.Start(); this.backgroundWorker.RunWorkerAsync();}private void setLabelText(){ InvokeLabel il = delegate(){ this.lable1.Text = i++.toString(); }; this.Invoke(il);}private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e){ while(true){ InvokeMainForm imf = delegate(){ mainForm = new MainForm(); }; this.Invoke(imf); } }
程序运行i++运行了一次,然后等到mainForm实例化后会继续执行?为什么?
[解决办法]
帮顶,我也遇到同样的问题了,2个线程调用2个委托,可能都会调用,但是如果其中一个委托的执行时间很长,需要等待执行过后才会执行第二个线程的委托,有没有什么好方法可以让2个委托同时执行?
[解决办法]
代码里用到了 this.Invoke ,这样他们就会转到主线程去执行,就有了先后顺序
[解决办法]
- C# code
this.Invoke改成this.BeginInvoke
[解决办法]
[解决办法]
Invoke就是阻塞. 阻塞是多线程编程的大忌. 只有在你确实无法使用 BegineInvoke 的时候才应该去使用 Invoke.