| 发表于:2007-01-10 11:50:18 楼主 |
一个窗体,里边有很多控件,比如有一个为mycontrol的控件和progressbar,提供了一个addentity方法,就是类似在这个控件中增加一个item.还有一个button,当用户点击这个button的时候,会create出一个线程: thread thread = new thread(new threadstart(dowork())); ... dowork()中会调用另外一个class a中的某个方法,如a.parseentity(),同时也打开进度条窗口; ... a.parseentity() { ... ongetentityresult(this,myeventargs()); } ongetentityresult是一个event,myeventargs继承eventargs. 接受端在另外一个class b中进行。 在处理函数中执行: b::EXECute() { methodinvoker mi = new methodinvoker(update); this.form.begininvoke(mi,new object[]{ "abc "}); } void update(string name) { this.form.mycontrol.addentity(name); this.fomr.progressbar.updateui(); } 为什么每次执行的时候,启动线程,如果执行addentity则ui主线程几乎死锁了。但是如果屏蔽this.fomr.mycontrol.addentity,则progressbar能及时更新当前进度。 另外,我想问问:在子线程通过call begininvoke,想去执行ui主线程中某个control中的方法时,真正执行这个方法的线程是ui主线程还是子线程? 谢谢大侠们!!! |
|
|
|
|