我使用Expression Blend 3创建了一个标准按钮,并将其绑定到用于打开LED的事件处理程序中。我也有一个关闭LED的类似按钮。我正在使用窗口CreateEvent()
和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
每次都没有设置事件对象名称。