Как вы вызываете методы CMFCRibbonProgressBar из другого потока? - PullRequest
1 голос
/ 21 сентября 2011

У меня есть простой CMFCRibbonProgressBar и поток, который вызывает SetPos (значение, ИСТИНА) для него, когда длительная операция прогрессирует.Проблема в том, что в режиме отладки он утверждает в wincore.cpp следующее:

    CHandleMap* pMap = afxMapHWND();
    ASSERT(pMap != NULL);

Я понимаю по комментариям в этом файле, что я не должен вызывать его из другого потока, потому что он потенциально может бытьопасно.Мой вопрос тогда, как вы получаете поток, чтобы обновить положение индикатора выполнения?Мне очень хочется просто проигнорировать это утверждение и продолжить в режиме релиза, но это довольно зло ...

Есть предложения?

1 Ответ

0 голосов
/ 21 сентября 2011

Хорошо, кто-то очень кратко прокомментировал вопрос, и у него был правильный ответ.Я не знаю, почему они отозвали свой комментарий: /

Я закончил тем, что хранил указатель CWnd * в производном классе CMFCRibbonProgressBar, и всякий раз, когда я вызываю метод "SetAmountCompleted" из рабочего потока, я использую CWndотправить пользовательское сообщение с указателем на производный класс в WPARAM.CWnd, который получает сообщение, затем извлекает указатель и вызывает метод Update, который перерисовывает индикатор выполнения.

Это сложно, уродливо, это MFC.Уф.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...