Помните, что многопоточность в VSTO, как правило, не очень хорошая идея. Однако я успешно использовал диалог прогресса ( Я начал с этого ). Вы все еще запускаете только один поток, который взаимодействует с API, так что, насколько я могу судить, все в порядке.
Вы называете это так:
ProgressDialogResult result = ProgressDialog.Execute(parent, name, () =>
{
// do whatever
}, new ProgressDialogSettings(true, true, false));
Вы также можете использовать WdProtectionType
, чтобы временно отключить редактирование (это для Word, но я думаю, что в Excel есть что-то похожее, может быть, XlProtectionType?), Но я бы не рекомендовал это.