1

我使用 Expression Blend 3 创建了一个标准按钮,并将其绑定到一个事件处理程序中以打开 LED。我也有一个类似的按钮来关闭 LED。我正在使用 windowsCreateEvent()SetEvent().

我遇到的问题是我必须按两次按钮才能让后端注册事件。每次点击都会被前端注册并SetEvent()执行该功能,但只有在第二遍时才会在后端被拾取。

前端实现:

HRESULT MainPage::Disable_Alarm_Click (IXRDependencyObject* pSender, XRMouseButtonEventArgs* pArgs)
{
    HRESULT hr = E_NOTIMPL;

    if ((NULL == pSender) || (NULL == pArgs))
    {
        hr = E_INVALIDARG;
    }

    SetEvent(s_hEvent[19]); //Notify back end that event occured

return hr;
}

后端事件实现:

m_hEvents[ALARM_DISABLE_1] = CreateEvent(NULL, false, false, ALARM_DISABLE_EVENT);
if(m_hEvents[ALARM_DISABLE_1] == NULL)
{
    return;
}

后端事件扫描:

case WAIT_OBJECT_0 + ALARM_DISABLE_1:
        //Do stuff 
        //I put a breakpoint here but it does not hit it until second pass
            break;

为了澄清这case一点,我有一个 switch-case 无限循环,其中包含与后端有关的所有事件的列表,这可以正常工作,因为其他事件每次发生时都会被注册。

我不确定我的代码是否做错了什么。就编码而言,这似乎相当简单。这只是Windows功能的一个错误吗?

我尝试单步执行代码以查看发生了什么,它总是会影响我的SetEvent功能,所以我没有发现我的代码有任何问题。似乎SetEvent不是每次都设置事件对象名称。

4

0 回答 0