После некоторой декомпиляции получается, что CallMethodAction
поддерживает вызов методов с параметрами.Однако CallMethodAction
очень строг в отношении ожидаемой подписи.Методы должны соответствовать следующему:
public void SomeMethod(object sender, EventArgs args) {
// do something
}
Где параметр args может быть подклассом EventArgs, что поэтому позволяет передавать (любое количество) пользовательских параметров.Например:
public class MyEventArgs : EventArgs {
public MyEventArgs(MyParam param) {
Param = param;
}
MyParam Param { get; private set; }
}
Таким образом, допускается следующая подпись:
public void SomeMethod(object sender, MyEventArgs args) {
var param = args.Param;
// do something
}
Для справки, вот код в CallMethodAction, который выполняет проверку соответствия:
private static bool AreMethodParamsValid(ParameterInfo[] methodParams)
{
if (methodParams.Length == 2)
{
if (methodParams[0].ParameterType != typeof(object) || !typeof (EventArgs).IsAssignableFrom(methodParams[1].ParameterType))
return false;
}
else if (methodParams.Length != 0)
return false;
return true;
}