2013-06-18 74 views
0

我有一个的Util类不同的返回类型和参数不同的几种方法,FE:传递不同的方法为参数的方法名称来调用

int RealMethodToExecute(int i, string s) { ... } 

这些方法必须在UI线程中调用和在调用看起来像:使用该方法的名称作为字符串是不是真的很漂亮

int x = (int)InvokeControl.Invoke("Util.RealMethodToExecute"); 

因为在我看来,我认为在以下解决方案:

0现在
public int WrappedRealMethodToExecute(int i, string s) 
{ 
    return InvokeMethod(Util.RealMethodToExecute, i, s); 
} 

private static T InvokeMethod<T>(Func<int, string, T> func, params object[] p) 
{    
    return (T)InvokeControl.Invoke(func.Method.DeclaringType.FullName + "." + func.Method.Name, p); 
} 

的问题是,的InvokeMethod仅acceppts有一个int和一个字符串参数和返回值的方法,但我有我想要执行不同的方法。

我不想超载调用方法。我只需要该函数的全限定名来执行它。

任何想法??

编辑:与参数

+1

使用*名称*周围的调用是一个非常可怕的方法,但是:我可以澄清 - 你说的参数;如果你*提供了一个带参数的方法,你期望它从哪里得到参数值? –

+0

扩展示例 – stefantinger

+0

我不明白的是,如果您可以传递委托,为什么不调用普通方法呢? –

回答

0

Fankly扩展的例子,这可能也只是:

private static object InvokeMethod(Delegate method, params object[] args) 
{    
    return InvokeControl.Invoke(method, args); 
} 

其中InvokeControl.Invoke用途(去UI线程):

someControl.Invoke(method, args); 
+0

已经在上面评论过了:invoke方法只允许传递函数名(字符串)而不传递委托(不幸的是, ) – stefantinger

+0

@stefantinger听起来怪异,但我想你只需要做你可以 –

相关问题