首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#多个委托调用多个方法(优先级?),该如何解决

2012-06-13 
C#多个委托调用多个方法(优先级?)定义了2个委托,一个用线程启动,一个用backgroundworker启动,为什么我用线

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
[解决办法]
探讨

我说说我要的效果吧,2个线程运行委托,一个委托在初始化界面,另一个会再一个LABEL上显示自增的数字。界面初始化结束,LABEL停止自增。感觉像进度条,但只是用文字显示。

[解决办法]
Invoke就是阻塞. 阻塞是多线程编程的大忌. 只有在你确实无法使用 BegineInvoke 的时候才应该去使用 Invoke.

热点排行