2012-08-28 24 views
3

我創建了一個具有幾個按鈕和一個文本框的自定義窗體。C#自定義窗體退出時拋出COMException

此自定義窗體是通過我在Microsoft Outlook外接程序上創建的單擊事件按鈕打開的,我正在將其附加到「功能區」上。 (不知道這是否重要,這裏沒有問題)。

在窗體窗體上,第一個按鈕只是將文本文件的內容保存到磁盤。

另一個按鈕嘗試關閉表單。在這個按鈕單擊事件中,我嘗試了以下兩行,單獨並在一起

this.Close();和this.Dispose();

當我使用這個按鈕或表格出口(位於一個視窗形式的右上的「x」)我收到以下錯誤,

收到COMException是通過從HRESULT用戶 異常未處理:0x800A01A8

當拋出這個錯誤,它帶我到「Connect.cs」下面的方法文件,

public void OnBeginShutdown(ref System.Array custom) 
     { 

      this.toolbarButton.Delete(System.Reflection.Missing.Value); 
      this.toolbarButton = null; 

     } 

我不知道如何開始解決此。我做了大量的研究,但不幸的是沒有發現太多。我確信這個問題可能是因爲我創建了一個沒有經驗的自定義表單,並且有一些我沒有做過或沒有意識到的「內務」或「最佳實踐」。

任何人都有這方面的見解?

+0

這段代碼會在運行*兩次*時彈出。不完全不可能,因爲Form.Close()通常已經包含一個dispose。添加'if(this.toolbarButton!= null)'是安全的。 –

回答

0

我猜了一點,但這裏是HResult的一個COMException意味着Object Required, 所以,當你調用兩個CommandBarButton.Delete一個事情是錯誤的。

要麼你已經處理了按鈕實例,要麼你應該將truefalse傳遞給Delete調用。

該按鈕不應該放置,直到從工具欄中刪除該按鈕,並且當它被丟棄時,您可能需要執行一個Marshal.ReleaeComObject以正確取消引用。

相關問題