2

从 Build 8201.2025 开始,在 Word 中加载带有功能区的 VSTO 插件时,事件顺序发生了意外更改。

  • 使用 Office 版本 16.0.8067.2115 或更早版本。加载插件时,会观察到以下事件顺序(一直如此)。

Ribbon_Load 事件

ThisAddin_Startup 事件

  • 使用 Office 版本 8201.2025、8201.2064 或 8201.2075 或更高版本时,事件顺序会颠倒,这是一个意外的重大更改。

ThisAddin_Startup 事件

Ribbon_Load 事件

  • 我使用可视化设计器功能区创建了一个简单的 VSTO 插件来演示该问题。

>

Public Class Ribbon1
    Private Sub Ribbon1_Load(ByVal sender As System.Object, ByVal e As RibbonUIEventArgs) Handles MyBase.Load

        System.Diagnostics.Debug.Write("Ribbon1_Load event called.")

        'Pass the Ribbon to the Addin.

        ThisAddIn.MyRibbon = Me

    End Sub
End Class

Public Class ThisAddIn

Public Shared Property MyRibbon As Ribbon1 = Nothing

    Private Sub ThisAddIn_Startup() Handles Me.Startup
        Debug.Write("ThisAddin_Startup Called")

        If (MyRibbon Is Nothing) Then
            Debug.Write("MyRibbon is nothing - the ribbon was not captured.")
        Else
            Debug.Write("Ribbon captured successfully.")
        End If

    End Sub
End Class
  • 16.0.8067.2115 32 位的调试输出

    • [7772] 调用 Ribbon1_Load 事件。

    • [7772] 调用了 ThisAddin_Startup

    • [7772] 功能区已成功捕获。

  • 16.0.8201.2075 32 位的调试输出

    • [13556] 调用了 ThisAddin_Startup
    • [13556] MyRibbon 什么都不是 - 功能区未被捕获。
    • [13556] 调用 Ribbon1_Load 事件

我已将其发布在Microsoft 支持论坛上,但他们已停止响应,并且自从将此版本发布到当前办公频道后,我需要开发社区的帮助。

有没有人找到成功的解决方法?这种时间变化给我们的初始化方式带来了很多问题。在他们调查此错误之前,Microsoft 支持人员最好提供解决方案或解决方法。

4

2 回答 2

1

因为我使用 Ribbon XML ,所以我总是得到Ribbon_Load以前的。ThisAddin_Startup功能区 UI 允许较少的控件...由于两者都是“入口”点,我建议您仅Ribbon1_Load在启动时使用。或者,如果您使用 Ribbon XML 模型并且想要第一个入口点,请尝试其构造函数

我不觉得这个问题是一个错误,为了使 Word 快速,许多进程都是异步的。因此,在我看来,第一个ThisAddin_Startupor Ribbon1_Loadto start 可能会因许多因素而意外改变:系统性能、Word 单独启动、Word 通过文档启动...

于 2017-08-11T10:28:50.067 回答
1

希望这对某人有帮助!我们成功地使用了以下解决方法来解决更改后的办公室负载行为。

ThisAddIn_Startup循环内,直到功能区加载事件触发并且功能区被捕获。

 While m_oRibbon Is Nothing
        If (timeWaited >= MAX_WAIT_TIME) Then
            Exit Try
        End If

        Threading.Thread.Sleep(50)
        timeWaited = timeWaited + 50
 End While
于 2018-07-12T00:29:40.887 回答