我想创建一个接收方法作为参数并延迟var的方法。并在延迟后执行该方法:
public static void performSelectorAfterDelay<T>(Action<T> method, T parameter, double delay)
{
Thread thread = new Thread(delegate()
{
Thread.Sleep(TimeSpan.FromSeconds(delay));
uc.BeginInvoke((Action)(() => method(parameter)));
});
thread.Start();
}
我希望它是通用的,因此我可以为这两种方法调用它:
public void funcA()
{
}
public void funcB(int num)
{
}
当我打电话时:
performSelectorAfterDelay(new Action(funcA), null, kSecondsWaitAfterTransferToFollowersPage);
performSelectorAfterDelay(new Action(funcB), 5, kSecondsWaitAfterTransferToFollowersPage);
我收到此错误:
不能从用法中推断方法performSelectorAfterDelay(System.Action,T,double)的类型参数。尝试显式指定类型参数。
有什么问题吗?
答案 0 :(得分:1)
编译器无法计算出类型,因为您要传递null作为第二个参数。
performSelectorAfterDelay(new Action(funcA), null, kSecondsWaitAfterTransferToFollowersPage);
无论如何,在解决该问题后,您将最终遇到另一个错误,因为funcB
占用了int
,因此由于new Action
的要求,它无法传递给Action
无参数方法。
根据其他答案,您也许可以使用Action<object>
使其正常工作,但这意味着您不能离开funcA
而没有参数。但是,除非我误解了,否则此解决方案对我来说似乎是多余的。您可以传递一个实际的操作,该操作使用其参数调用funcA / funcB,如下所示:
public void performSelectorAfterDelay(Action method, double delay)
{
Thread thread = new Thread(delegate ()
{
Thread.Sleep(TimeSpan.FromSeconds(delay));
method();
});
thread.Start();
}
public void test()
{
performSelectorAfterDelay(() => funcA(), kSecondsWaitAfterTransferToFollowersPage);
performSelectorAfterDelay(() => funcB(1), kSecondsWaitAfterTransferToFollowersPage);
}
答案 1 :(得分:0)
该错误消息说明了什么。 这是固定版本的先生:
10