我使用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'',那麼你就有了答案。這是一樣的模式。 –