我现在有两个线程假设为T和U,T为计时器线程,由计时器控制定时执行。U为用户界面线程,由用户控制随机执行。目前由于是二次开发,我对T线程的执行时间和启停没有任何控制能力。但是可对T线程的某个执行方法所在的类ClassT进行修改。我想实现这样一个功能,T线程执行时需要独占网络通道资源,而我的U线程也需要占用网络通道资源。
  我的想法是通过U线程修改T线程执行方法的类,给T线程一个标志变量,T线程的方法检测该标志变量执行某个U线程要执行的方法。从而实现T线程代U线程执行要执行的方法的目的。
   1.修改ClassT类,新建 bool型 mUDelegated 变量。用于控制T线程执行需要的方法。
   2.修改T线程的执行方法,ClassT中的MethodT方法,增加依赖于mUDelegated变量的分支,用于执行U线程指定的方法MethodU2(该方法可能是很多不同的方法)。
   3.编写U线程的方法MethodU,修改mUDelegated的值。
    目前有这么个问题
   a.我如何将通过U线程要执行的方法名和方法参数传递个T线程?
   b.U线程如何获得和T线程执行方法MethodU2的结果?  我尝试这么几种方式
  a. 通过定义委托,MethodT的分支方法内直接调用委托。但是存在传递参数和返回参数的问题,另外调用的方法类型都不一样委托似乎无法实行。
  b. 向类ClassT中添加一个变量,方法名,通过反射执行指定方法。同样存在传递参数的问题。
  c. 对每个方法设计一个类,用于存储传入参数和返回参数,该思路似乎可行,但执行起来使得程序结构相当复杂,代码量也很大。
请高手替我分析下。

解决方案 »

  1.   

    问题 请 采用 
    装饰模式(Decorator Pattern)(类定义不能用于生成子类时使用,是变向 的继承)
    和观察者模式(Observer Pattern)(事件委托)使用 Decorator 方式 扩展T 加上 事件在使用 T时 加上 注册事件
    如:delete public 定义的事件;
    X:Decorator
    {  线程执行的方法()
    {
      base.线程执行的方法();
      定义的事件();
    }
    }使用 X时,便向启动 T
    在做玩了,触发事件x.定义的事件 += 定义的事件(你自己写的事件处理方法)