我使用RegisterWaitForSingleObject
调用它的基本用法形式来调用提供的超时值的方法,并且一切正常。不过有一个特殊的scerio我正在使用这个调用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
注册的回拨方法?
参见[?C#传递额外的参数给事件处理程序(http://stackoverflow.com/questions/4215845/c-sharp-passing-extra-parameters-to-an-event-handler),[C#:传递参数给回调函数](http://stackoverflow.com/questions/3184947/c-passing-parameters-to-callbacks )和其他许多人。 –
@RaymondChen - 其实我至少在实施的解决方案中并不完全相同。基本上我无法从这些帖子推断出我的问题的答案。 ChrisSinclair的回答似乎一度被揭露出来。也许这只是我缺乏理解,所以感谢链接。 – atconway
相同的形状,只是名称是不同的。您可以创建一个接受事件参数的lambda表达式,并使用任何其他参数将它们传递给回调函数。在第一种情况下,'id => AfterSaveMethod2(id,index)'基本上与'(state,timeout)=> MyCallbackMethod(state,timeout,“ABC123”)'相同,只是'id'改为'state ,超时和索引更改为“ABC123”。同样的,如果你把'(sender)=> evHandler(sender,someData)'并将'sender'改为'state,timeout'和'someData'为''ABC123'',那么你就有了答案。这是一样的模式。 –