Выпуск пользовательских панелей Outlook VSTO.Добавить — Такой интерфейс не поддерживается

#outlook #vsto #outlook-addin

Вопрос:

Я работаю над плагинами Outlook VSTO для отображения сообщения поверх текущего открытого окна. Например, я хочу отобразить сообщение пользователю при попытке «Ответить всем» при определенных условиях. По электронной почте это работает нормально, но то же самое не работает при встрече.

Письмо по делу — (Ответ, Ответить всем, Новое)

Он работает нормально, как показано ниже.

      'Starup Event to initialize control objects
            Private Sub ThisAddIn_Startup() Handles Me.Startup
                Try
                    'Insitialize outlook inspector.
                    inspectors = Globals.ThisAddIn.Application.Inspectors
        
                    'Create new inspector
                    AddHandler inspectors.NewInspector, AddressOf inspectors_NewInspector
       
        
                Catch ex As System.Exception
                    'MessageBox.Show(ex.StackTrace)
                End Try
        
            End Sub
    
      
    
    Sub inspectors_NewInspector(inspector As Microsoft.Office.Interop.Outlook.Inspector)
        Try
            subInspector = inspector
    
            Dim mailItem As Outlook.MailItem
            mailItem = DirectCast(inspector.CurrentItem, Outlook.MailItem)
    
            'AddHandler mailItem.Open, AddressOf explorer_onOpen
    
        Catch ex As System.Exception
    
        End Try
    End Sub

      Private Sub explorer_onOpen()
        'I am using Thread to wait few seconds until New Email Windows open.
        'Else message message bar display on the windows which opened and on top. and 
         ' New/Reply email windows takes some time to appear.
        
        Dim thread As New Thread(AddressOf MyBackgroundThread)
        thread.IsBackground = True
        thread.Start()
    End Sub

 Private Sub MyBackgroundThread()
        Try
            'Pause code for 2.5 seconds
            Thread.Sleep(2500)
            MessageBox.Show("Threading")

            _obj = New UserControl2
            Dim _pane1 = Globals.ThisAddIn.CustomTaskPanes.Add(_obj,"Test",Globals.ThisAddIn.Application.ActiveWindow)
           _pane1.Visible=True
        Catch ex As System.Exception
            MessageBox.Show(ex.Message)
        End Try

    End Sub
 

Но тот же код не работает при назначении. Код выглядит следующим образом. Только изменения, которые я внес в Открытое событие и поток

 Sub inspectors_NewInspector(inspector As Microsoft.Office.Interop.Outlook.Inspector)
        Try
            subInspector = inspector            
            Dim appouitmentItem As Outlook.AppointmentItem
            appouitmentItem = DirectCast(inspector.CurrentItem, Outlook.AppointmentItem)

            AddHandler appouitmentItem.Open, AddressOf explorer_onOpen

        Catch ex As System.Exception

        End Try
    End Sub

    Private Sub explorer_onOpen()
        'Thread to display warning message after few seconds
        MessageBox.Show("Thread to display warning message after few seconds")
        Dim thread As New Thread(AddressOf MyBackgroundThread)
        thread.IsBackground = True
        thread.Start()

    End Sub

 Private Sub MyBackgroundThread()
        Try
            'Pause code for 2.5 seconds
            Thread.Sleep(2500)
            MessageBox.Show("Threading")

            _obj = New UserControl2
                Dim _pane1 = Globals.ThisAddIn.CustomTaskPanes.Add(_obj,"Test",Globals.ThisAddIn.Application.ActiveWindow)
               _pane1.Visible=True
        Catch ex As System.Exception
            MessageBox.Show(ex.Message)
        End Try

    End Sub
 

Я получаю ошибку
«Невозможно привести систему типа объекта COM»._ComObject’ для типа интерфейса ‘Microsoft.VisualStudio.Инструменты.Офис.Время выполнения.ICustomTaskPaneSite». Эта операция не удалась, поскольку вызов QueryInterface для компонента COM для интерфейса itnterface с IID{} не удался из-за следующей ошибки: Такой интерфейс не поддерживается.

Среда: Visual Studio 2019 Office 2016

Ответ №1:

Прежде всего, в Outlook нет необходимости использовать панели задач для окон инспектора. Вместо этого вы можете рассмотреть возможность использования областей форм Outlook. Области форм предлагают множество улучшений по сравнению с разработкой традиционных форм Outlook:

  • Настройте страницу по умолчанию для любой стандартной формы.
  • Добавьте до 12 дополнительных страниц в любую стандартную форму.
  • Замените или улучшите любую стандартную форму.
  • Отображение пользовательского интерфейса в области чтения и в Инспекторах.

Дополнительные сведения см. в разделе Настройка страниц форм и областей форм.

Обработчик FormRegionInitializing событий отображается в файле кода области формы. Вы можете использовать этот обработчик событий, чтобы указать, должен ли Outlook отображать область формы. Дополнительные сведения см. в разделе Обработка событий области формы.

Кроме того, вам необходимо запустить код из основного потока (потока пользовательского интерфейса), поскольку Outlook использует однопоточную модель квартиры. Кроме того, любые изменения пользовательского интерфейса должны вноситься из основного потока.

Комментарии:

1. Привет, FormRegion не дает мне возможности отображать сообщение сверху. Область формы отображается только внизу. Так что это не соответствует моим требованиям. В то время как CustomTaskPanes работает в электронной почте в потоке, в то время как он не работает на собрании в потоке. Внешняя резьба работает нормально