3

我正在使用RegisterWaitForSingleObject它的基本用法形式的调用来根据提供的超时值调用方法,并且一切正常。但是,我正在使用一个特定的场景,其中要调用的代码RegisterWaitForSingleObject发生在事件处理程序中,我需要向回调方法传递一些额外的信息。当前回调方法具有以下必需的签名:

public void MyCallBackMethod(object state, bool timedOut)

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

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

但是现在我不知道要手动发送哪些值state以及timeout在调用时尝试添加此值时RegisterWaitForSingleObject

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

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

4

1 回答 1

3

您可以利用 lambda 的/闭包来忽略其他参数,并使用您想要的值调用您想要的方法吗?

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

或者,如果您MyCallBackMethod确实采用了stateandtimeout事件参数:

ThreadPool.RegisterWaitForSingleObject(
    _stop, 
    (state, timeout) => MyCallBackMethod(state, timeout, "ABC123"), 
    null, 
    5000, 
    true);
于 2013-06-04T19:48:19.973 回答