簡體   English   中英

如何在interop dll異步后訂閱set事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM