![](/img/trans.png)
[英]How to subscribe to a event from a dll file and get a list generated by the dll?
[英]How to subscribe set event after async from interop dll
我想從hEvent
訂閱事件,但仍然不明白如何從IntPtr
訂閱。 我在網上搜索,找到使用代表的方式。 如何訂閱此類財產的事件?
我的C#代碼:
var hEvent = new IntPtr();
IntPtr lpcOmcr = OMCR_OpenDevice(null, ref lpcOption);
uint result = OMCR_TurnonLED(lpcOmcr, (int)ReturnCode.LedColor.OMCR_SET_LED_COLOR_GREEN, ref hEvent); //result = 1 == OMCR_STATUS_PENDING
API文檔:
有沒有人經歷過這個? 謝謝。 注意:此代碼可用於打開LED。
在這種情況下,“事件”與C#事件不同。 這是一個非托管的Windows事件句柄。 你所能做的就是等待它。 幸運的是,.NET確實提供了一些有用的包裝器來讓你使用它。
你要處理的基本方法是這樣的:
var hEvent = new IntPtr();
IntPtr lpcOmcr = OMCR_OpenDevice(null, ref lpcOption);
uint result = OMCR_TurnonLED(lpcOmcr, (int)ReturnCode.LedColor.OMCR_SET_LED_COLOR_GREEN, ref hEvent); //result = 1 == OMCR_STATUS_PENDING
using (EventWaitHandle waitEvent =
new EventWaitHandle(false, EventResetMode.ManualReset))
{
waitEvent.SafeWaitHandle = new SafeWaitHandle(hEvent, false);
waitEvent.WaitOne();
}
至少,這應該工作。 如果沒有完整的代碼示例,我無法測試上述內容以確保它適用於您的情況。
請注意,上述內容是嚴格同步的,當然根本不涉及C#事件。 但是你當然可以采用上面的基本技術並將其包裝在所需的C#抽象中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.