Powerpoint / VSTO + WPF + многопоточность, почему слабая производительность или слабая отзывчивость? - PullRequest
0 голосов
/ 10 октября 2018

Я разрабатываю надстройку для PowerPoint.Я вставляю wpf control в элемент управления winforms / office taskpane.

(Почти) все работает нормально, но у меня есть проблема с отзывчивостью / производительностью управления потоком / wpf.

Когда я запускаю какой-то долго работающий метод в новом потоке, это занимает много времени длязавершите его (около 5-6 минут), но контроль реагирует, и мой контроль прогресса работает нормально (появляется, и все ярлыки обновляются правильно и плавно).Когда я запускаю его, не создавая новый поток, он завершается примерно через 15 секунд, но представление прогресса вообще не отображается, PowerPoint просто зависает примерно на 15 секунд (до конца метода и перехода в другое представление).

код 1, хорошая отзывчивость, ужасная производительность (5-6 минут):

public void Prepare()
{
    Thread myNewThread = null;
    if (AuditType == AuditGeneralType.ContentAudit)
    {
        myNewThread = new Thread(() => Auditor.AuditContentMD(Globals.ThisAddIn.Application.ActivePresentation, this, SessionData.Settings));
    }
    else if (AuditType == AuditGeneralType.FormattingAudit)
    {
         myNewThread = new Thread(() => Auditor.AuditFormattingMD(Globals.ThisAddIn.Application.ActivePresentation, this, SessionData.Settings));
    }
    myNewThread.Priority = ThreadPriority.Highest;

    myNewThread.Start();
}

код 2 (нет отзывчивости, очень хорошая производительность - 15 секунд):

public void Prepare()
{
    if (AuditType == AuditGeneralType.ContentAudit)
    {
        Auditor.AuditContentMD(Globals.ThisAddIn.Application.ActivePresentation, this, SessionData.Settings);
    }
    else if (AuditType == AuditGeneralType.FormattingAudit)
    {
        Auditor.AuditFormattingMD(Globals.ThisAddIn.Application.ActivePresentation, this, SessionData.Settings);
    }
}

Что следуетЯ изменил код, который приведет к:

  • высокая производительность
  • высокая скорость отклика
  • плавность

?

...