Целесообразно ли передавать 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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