我希望在计时器刻度中重复调用具有相同参数的相同函数。我不想将这些参数作为类变量存储在表单中,因为它不需要更改。
我目前的解决方案是:
/// <summary>
/// This class is designed to bundle in data with a function pointer.
/// The function pointer is intended to be called repeatedly after leaving the context of the initial parameters.
/// </summary>
public class FunctionPointerWithState
{
/// <summary>
/// The function pointer to call when issuing a search.
/// </summary>
private Action<object> Issuer;
/// <summary>
/// The parameter to send.
/// </summary>
private object Param;
/// <summary>
/// Creates a new object with the appropriate state.
/// </summary>
public SingleLobBurstSearch( Action<object> issuer, object prm )
{
Issuer = issuer;
Param = prm;
}
/// <summary>
/// Calls the stored function pointer with the stored state.
/// </summary>
public void IssueRequest()
{
Issuer( Param );
}
}
“IssueRequest()”由每个tick上的计时器调用。是否有与此相当的内置语言?
谢谢!另外,如果问题不明确,请告诉我。
编辑:我想在没有lambda表达式的情况下这样做。
答案 0 :(得分:3)
这不仅仅是闭包的本质吗?
Action MakeIssuer(SomeParam param)
{
Action issuer = () => DoSomeWork(param);
return issuer;
}
答案 1 :(得分:1)
你可以捕获它们:
int i = 5;
myTimer.Tick += (s, e) => doStuff(i);
答案 2 :(得分:1)
您没有说明您正在使用什么类型的计时器。既然你提到表格,我会假设你的意思是System.Windows.Forms.Timer
。您可以设置Timer的Tag属性来保存值。然后,每当tick事件发生时,您都可以从该属性中获取值。
如果您正在使用System.Threading.Timer,则可以将状态信息作为第二个参数传递给计时器构造函数。该信息将作为State
参数传递给计时器回调。
似乎没有办法将状态信息传递给System.Timers.Timer的Elapsed
事件处理程序。
答案 3 :(得分:0)
如果毫秒足够接近精确度,那么Timer类将为您提供帮助。作为构造函数的一部分,您提供了在间隔出现时调用的方法。