2013-06-18 54 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聽起來怪異,但我想你只需要做你可以 –

相關問題