c#线程:如何在 Thread_B 里面让 Thread_A 执行某个方法?
单纯的实现这一点似乎很简单: 在A线程 里面循环检测一个字段, 变了就执行特定方法, 而B线程 在必要时候修改该字段就行.
我的应用是基于winforms的MVC, 在Model中创建了线程B(比如下载一个文件), 线程B结束时通知Controller, Controller修改对应的View(一个Form,在线程A中).
现在的问题是, 我不希望Controller中的任何方法在UI线程(线程A) 之外被调用( 以免写Controller的人去担心"这个方法会在哪个线程中执行?"), 而线程B只应和Controller打交道.... 那么线程B如何让线程A执行一个方法?
我能想到的思路, 就和开头说的那样: A是UI线程, 在它的Runloop里面检测Controller的某个字段 ... 线程B只需修改该字段......可是如何访问到Runloop ... google不到啊.....
------解决方案--------------------
既然是让A去做,只能是委托了。或者让A轮询去调用。
问题是,为什么要让A去做,而不是B,或者再开一个新线程呢?如果因为A是UI线程,似乎这不是个问题。
------解决方案--------------------
------解决方案--------------------异步回调简单来说就是发出一个回调的请求给另一个线程,但是并不等它实际被调用就不管了。
而那个线程负责去掉用——因为是界面线程自己调用,所以就没有跨线程同步的问题了。
简单来讲,这是一个固定模式,在界面线程中定义好了更新界面的代码,并且作为一个委托,在工作线程中用Control.BeginInvoke调用。具体可以msdn。