IMessageFilter для консольного приложения - PullRequest
0 голосов
/ 26 сентября 2018

В моем консольном приложении используется стороннее (не Microsoft) приложение, которое обеспечивает функциональность COM-сервера.Я реализовал интерфейс IMessageFilter способом, описанным здесь .

От интерфейса я ожидаю, что когда COM-объект выполняет какую-либо задачу и не может, например, немедленно выйти из моего запроса от другогоон будет непрерывно вызывать RetryRejectedCall() и ждать, пока объект освободится.

Тем не менее, я вижу, что он не работает, как это, но вместо этого выдает COMException, где я пытаюсь закрыть снова и снова.И после того, как я получаю OnQuit событие от COM-объекта, он вызывает RetryRejectedCall() со значением 2 (SERVERCALL_RETRYLATER).

Мой журнал выглядит следующим образом:

Info:   COM - opening project 'MyProject'...
Info:   Console_CancelKeyPress event fired.      // I pressed ctrl+c
Info:   COM - quitting... (attempt 1)            // quit() called from another thread
Error:  COM - failed to close, it might be busy.
Info:   COM - quitting... (attempt 2)
Info:   COM - project 'MyProject' opened.
Info:   COM - quit successfully                  // quit only after open operation complete
Debug:  RetryRejectedCall: dwRejectType=2
Debug:  Test run thread is being aborted
Info:   COM - quit successfully              // why quit again?

Вопросы:

  1. Верны ли мои ожидания или у него есть другая функциональность?
  2. Должен ли я реализовывать IMessageFilter для приложений, которые вообще работают с COM-объектами?В моем случае все работает как было без интерфейса.
...