AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.02.2019, 15:03   #13  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,983 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Коллега придумал вариант для 4-ки.
Он универсальный и подходит для ax 3.0 - 2012
И мне нравится больше чем вариант с infolog.yield()

Делаем в global пару методов
X++:
// Для предотвращения создания операционкой окна-призрака поверх окна клиента АХ
// что выглядит как повисание системы, даже если в это время идет перерисовка прогресса
// Данную функцию следует вызывать не реже чем #TimeInterval секунд (объявлено в preventWindowsGhostingClient_MRC())
// JEV003298 "Оптимизация работы отчета "Остатки в открытом заказе (расширенный)"", shai 26.02.2019
public static void preventWindowsGhosting_MRC()
{
    ;

    if (hasGUI())
    {
        preventWindowsGhostingClient_MRC();
    }
}
X++:
// JEV003298 "Оптимизация работы отчета "Остатки в открытом заказе (расширенный)"", shai 26.02.2019
client private static void preventWindowsGhostingClient_MRC()
{
    Binary              message;
    DLL                 winApiDLL;
    DLLFunction         peekMessage;
    Struct              cachedData;
    SysGlobalCache      globalCache;

    timeOfDay           lastTime;
    timeOfDay           newTime;

    #define.DLL("USER32")
    #define.DLLFunctionPeekMessageA("PeekMessageA")
    #define.GlobalCacheOwner("Global_preventWindowsGhosting_MRC")
    #define.messageBinary_30(30)
    #define.PM_NOREMOVE(0)
    #define.TimeInterval(2)
    ;

    newTime = timenow();

    globalCache = infolog.globalCache();

    cachedData = globalCache.get(#GlobalCacheOwner, "cachedData", cachedData);

    if (!cachedData)
    {
        winApiDLL = new DLL(#DLL);
        peekMessage = new DLLFunction(winApiDLL, #DLLFunctionPeekMessageA);
        peekMessage.arg(ExtTypes::Pointer, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord);

        message = new Binary(#messageBinary_30);

        cachedData = new Struct();
        cachedData.add("lastTime", -#TimeInterval - 1);
        cachedData.add("peekMessage", peekMessage);
        cachedData.add("messageBuf", message);

        globalCache.set(#GlobalCacheOwner, "cachedData", cachedData);
    }

    lastTime = cachedData.value("lastTime");

    if (abs(newTime - lastTime) > #TimeInterval)
    {
        peekMessage = cachedData.value("peekMessage");
        message = cachedData.value("messageBuf");

        peekMessage.call(message, 0, 0, 0, #PM_NOREMOVE);

        cachedData.value("lastTime", newTime);
        globalCache.set(#GlobalCacheOwner, "cachedData", cachedData);
    }
}
Затем в \Classes\SysOperationProgressBase\update
делаем так
X++:
            ...
            }

            // JEV003298 "Оптимизация работы отчета "Остатки в открытом заказе (расширенный)"", shai 27.02.2019 -->
            preventWindowsGhosting_MRC();
            // JEV003298 "Оптимизация работы отчета "Остатки в открытом заказе (расширенный)"", shai 27.02.2019 <--

            if (conlen(progress))
            {
                t1 = WinAPI::getTickCount();
                this.sendProgress(progress);
                if ((WinAPI::getTickCount() - t1)/*milliseconds*/ div 100 >= updateInterval /*seconds*/)
                    updateInterval++;
            }
            this.updateTime();
        }
    }
}
P.S. При таком способе на Ctrl-break реагирует сразу, т.е. система стала более отзывчивой. Раньше из-за WindowsGhosting могло игнорировать.

Последний раз редактировалось Logger; 27.02.2019 в 15:08.
За это сообщение автора поблагодарили: gl00mie (3).
Теги
ax2009, peekmessagea, vista, yield, баг, законченный пример, окно, ошибка, полезное, прогресс

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
daxdilip: Whats New in Dynamics AX 2012 (A brief extract from the recently held Tech Conf.) Blog bot DAX Blogs 7 31.01.2011 12:35
mbsturk: Ax 2009 Rollup 4 Version Checker Blog bot DAX Blogs 0 29.04.2010 17:05
Ошибка в логе при установке клиента AX 2009 sao DAX: Администрирование 9 04.02.2010 11:56
JOPX: Why Microsoft Dynamics AX 2009 might interest SharePoint developers ... Blog bot DAX Blogs 0 21.08.2008 01:05
Dynamics AX: Dynamics AX 2009 & SQL Server 2008 Blog bot DAX Blogs 0 10.06.2008 21:08

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:56.