我使用 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
不是每次都设置事件对象名称。