如何使用RegisterWaitForSingleObject将参数传递给回调方法?

时间:2013-06-04 19:46:15

标签: c# .net periodic-processing

我正在使用RegisterWaitForSingleObject调用它的基本用法表单,根据提供的超时值调用方法,并且一切正常。然而,有一个特殊的场景,我正在使用这个调用RegisterWaitForSingleObject的代码发生在事件处理程序中,我需要传递回调方法一些额外的信息。目前,回调方法具有以下必需的签名:

public void MyCallBackMethod(object state, bool timedOut)

所以我可以在技术上做到这一点:

public void MyCallBackMethod(object state, bool timedOut, string SomeValue)

但是,现在我不知道在调用state时尝试添加此值时,timeoutRegisterWaitForSingleObject会手动发送哪些值

ThreadPool.RegisterWaitForSingleObject(_stop, MyCallBackMethod(?,?, "ABC123"), null, 5000, true);

如何正确地将其他值传递给使用RegisterWaitForSingleObject注册的回调方法?

1 个答案:

答案 0 :(得分:3)

你可以利用lambda / closure来忽略其他参数,只需用你想要的值调用你想要的方法吗?

ThreadPool.RegisterWaitForSingleObject(
    _stop, 
    (state, timeout) => MyCallBackMethod("ABC123"), 
    null, 
    5000, 
    true);

或者,如果您的MyCallBackMethod确实接受了statetimeout个参数:

ThreadPool.RegisterWaitForSingleObject(
    _stop, 
    (state, timeout) => MyCallBackMethod(state, timeout, "ABC123"), 
    null, 
    5000, 
    true);