Целесообразно ли передавать IRibbonUI в классы обслуживания для обновления ленты после асинхронной работы в надстройке VC#

Место общения программистов C#
Anonymous
Целесообразно ли передавать IRibbonUI в классы обслуживания для обновления ленты после асинхронной работы в надстройке V

Сообщение Anonymous »

У меня есть подключаемый модуль Word VSTO с другими вспомогательными проектами внутри решения. Мне нужно изменить значок кнопки ленты в зависимости от результата асинхронной задачи. Для этого я использую ленту.Invalidate(). Это обновит мою ленту и загрузит новый значок. Это просто кнопки, созданные в ленточном XML.
Я не могу интегрировать ленту.Invalidate() в мои нажатия кнопок в Ribbon.cs, поскольку нажатие кнопки в основном вызывает функции Async или функцию, которая вызывает функции async - в других проектах. Таким образом, сразу после нажатия кнопки функция немедленно возвращает и делает ленту недействительной до того, как фоновая асинхронная функция завершит свой процесс.
Я попробовал отправить объект ленты в качестве параметра в функцию, которая запускает задачу синхронизации, и вызвать Invalidate оттуда - в операторе Final функции. В некоторых случаях это было успешно, но в некоторых случаях было непросто. Но я могу заставить это работать.
Мой вопрос: можно ли передавать ленту в качестве параметра внутренним классам или есть лучший способ?
Ribbon.cs

buttonClick()
{
SomeClass.SomeFunction(ribbon)
}

SomeClass.cs

SomeFunction(IRibbonUI ribbon)
{
try
{
//Async Process
}
finally
{
ribbon.Invalidate()
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... ribbon-aft

Вернуться в «C#»