我创建了一个自定义表单,其中包含几个按钮和一个文本框。

这个自定义表单是通过我在Microsoft Outlook加载项上创建的单击事件按钮打开的,我正在将其附加到“功能区”上。 (不确定这是否重要,这里没有问题)。

在Windows窗体上,第一个按钮只是将文本文件的内容保存到磁盘。

其他按钮尝试关闭该窗体。在此按钮单击事件中,我尝试了以下两行,分别并在一起

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

当我使用此按钮或窗体导出(位于Windows窗体右上方的“x”)时,出现以下错误,

用户未处理COMException
来自HRESULT的异常:0x800A01A8

引发此错误时,将按照以下方法将我带到“Connect.cs”文件中,

public void OnBeginShutdown(ref System.Array custom)
        {

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

        }

我不确定如何开始对此进行故障排除。我已经做了很多研究,但不幸的是,我没有发现太多。我确定问题可能出在我没有经验的情况下创建了自定义表单,并且有一些我没有做过或不知道的“内务处理”或“最佳做法”。

有人对此有见识吗?

最佳答案

我在这里有点猜测,但是COMException的HResult表示Object Required
因此,当您调用 CommandBarButton.Delete 时,有两件事是错误的。

您已经处置了按钮实例,或者应该将truefalse传递给Delete调用。

在从工具栏上删除按钮之前,不应释放该按钮,并且在释放按钮后,您可能需要执行 Marshal.ReleaeComObject 才能正确取消引用它。

关于c# - C#自定义表单在退出时抛出COMException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12162203/

10-11 00:16