在我的机器我有FormInitializingFormShowing事件之前发射RibbonLoad 我在VS 2010中创建了一个安装程序包,并安装在装有Outlook 2010的普通 Windows 7 Ultimate上。

该插件没有出现在我的会议请求表上。 因此,我设置了远程调试器,令我惊讶的是, RibbonLoad在上述两个表单事件之前触发。 正在抛出空异常b \\ c RibbonLoad的代码依赖于已经加载的FormRegion 谁能提供任何见解?

===============>>#1 票数:1 已采纳

对于某些Outlook事件,没有定义的顺序- 功能区UI检查器UI是完全不同的组件,尽管它们都显示在同一窗口中。 Outlook运行时可能会以不同顺序触发功能区和检查器事件。 如果需要完成一些初始化FormInitializing同步两个事件( RibbonLoadFormInitializing )是您的工作。 您不能假设顺序将始终相同。

ThisAddIn.StartupThisAddIn.CreateRibbonExtensibilityObject之前ThisAddIn.CreateRibbonExtensibilityObject ,但有时在Outlook触发排序之后,我会注意到相同的行为。 您可以仅使用带有同步锁定的静态变量来确保初始化代码仅触发一次。

这是我用来将Startup事件与RibbonLoad事件同步的示例:

public partial class ThisAddIn
{
  static bool formInitialized = false;
  static readonly object padLock = new Object(); 

   private void ThisAddIn_Startup(object sender, System.EventArgs e)
   {
       lock(padLock) { if (!formInitialized ) { InitializeForm(); } }
       // startup code
    }

   private void InitializeForm() 
   {
      // init code
      formInitialized = true;
   }

   protected override IRibbonExtensibility CreateRibbonExtensibilityObject()
    {
        lock(padLock) { if (!formInitialized) InitializeForm(); }
        // Create ribbon UI
    }
}

  ask by jive137 translate from so

未解决问题?本站智能推荐: