Я разрабатываю надстройку для 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);
}
}
Что следуетЯ изменил код, который приведет к:
- высокая производительность
- высокая скорость отклика
- плавность
?