1

Expression Blend 3 を使用して標準ボタンを作成し、これを LED をオンにするイベント ハンドラーに結び付けました。LEDをオフにするための同様のボタンもあります。WindowsCreateEvent()SetEvent().

私が直面している問題は、バックエンドがイベントを登録するためにボタンを 2 回押す必要があることです。各クリックはフロントエンドによって登録され、SetEvent()関数が実行されますが、バックエンドで取得されるのは 2 回目のパスのみです。

フロントエンドの実装:

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