我有一个从队列中调度Actions
的类。但是,我的InvokeLater
只接受Action
,没有任何参数。
这是我的Dispatcher
:
public class Dispatcher : MonoBehaviour
{
private static readonly Queue<Action> tasks = new Queue<Action>();
public static Dispatcher Instance = null;
static Dispatcher()
{
Instance = new Dispatcher();
}
private Dispatcher(){ }
public void InvokeLater(Action task)
{
lock (tasks)
{
tasks.Enqueue(task);
}
}
void FixedUpdate()
{
while (tasks.Count > 0)
{
Action task = null;
lock (tasks)
{
if (tasks.Count > 0)
{
task = tasks.Dequeue();
}
}
task();
}
}
}
我这样用:
var action = new Action(RequestPrediction);
Dispatcher.Instance.InvokeLater(action);
其中RequestPrediction
是无参数函数 - 我想改变它以使它(RequestPrediction
)采用int
参数。
如何更改Dispatcher
以便我可以执行以下操作:
var action = new Action(RequestPrediction);
Dispatcher.Instance.InvokeLater(action,5);
答案 0 :(得分:4)
最简单的解决方案:
<file src="bin\Release\<name>.dll" target="lib\net20"/>
否则,您必须开发框架,并且最终会看到类似于现有Amazon Cognito Identity API documentation或现有TPL library in .NET的内容。哪些是其他更好的建议。
答案 1 :(得分:1)
使用lambda函数。它将自动转换为Action。而不是
var action = new Action(RequestPrediction);
Dispatcher.Instance.InvokeLater(action);
您可以使用
Action action = () => RequestPrediction();
Dispatcher.Instance.InvokeLater(action);
或者如果您更喜欢隐式类型的局部变量(var关键字):
var action = new Action(() => RequestPrediction());
Dispatcher.Instance.InvokeLater(action);
这样,您可以在调用站点中添加参数:
Action action = () => RequestPrediction(5);
Dispatcher.Instance.InvokeLater(action);
或者
var action = new Action(() => RequestPrediction(5));
Dispatcher.Instance.InvokeLater(action);