首页 / 知识
使用COM互操作处理对象生命周期的最有效方法是什么?
2023-04-17 08:18:00

What is the most efficient way to handle the lifecycle of an object with COM interop?我有一个Windows Workflow应用程序,它使用为COM自动化编写的类。 我正在使用COM从类中打开Word和Excel。 我当前在COM帮助器中实现IDisposable,并使用Marshal.ReleaseComObject()。 但是,如果我的工作流程失败,则不会调用Dispose()方法,并且Word或Excel句柄保持打开状态,并且我的应用程序将挂起。 这个问题的解决方案非常简单,但我不仅要解决问题,还想学点东西,并深入了解使用COM的正确方法。 我正在寻找"最佳"或最高效,最安全的方式来处理拥有COM句柄的类的生命周期。 模式,最佳做法或示例代码将很有帮助。 我看不到您没有调用Dispose()方法的故障。我使用顺序工作流进行了测试,该工作流仅包含一个引发异常的代码活动,并且我的工作流的Dispose()方法被调用了两次(这是由于使用了标准的WorkflowTerminated事件处理程序)。检查以下代码: Program.cs
工作流程1.cs
我想念什么吗?关于Activity(以及因此导致的Workflow)对象与生命周期相关的方法,请查看以下文章:Activity"生命周期"方法。如果您只想了解有关处理的一般文章,请选中此复选框。 基本上,您不应在工作结束时依靠手动代码在对象上调用Dispose()。您现在可能有这样的事情:
相反,您需要使用try块来捕获可能触发的任何异常,然后在此时调用dispose。这是规范的方式:
这是如此普遍,以至于C#具有一种特殊的结构,可以生成相同的精确代码(请参见注释),如上所示。这是您大多数时候应该做的(除非您具有一些特殊的对象构造语义,这些语义使上面的手动模式更易于使用):
编辑: |
最新内容
相关内容
linux使用命令的方法?
linux使用命令的方法?,系统,信息,工具,标准,数据,命令,左下角,目录,文件夹,图标,linux的cd命令的使用方法1、cd ~:回到用户家目录。注:这得看你linux无效对象的命令?
linux无效对象的命令?,软件,系统,单位,网络,管理,术语,检测,电脑,环境,风险,linux疑问:普通用户的ifconfig命令无法执行,如何解决?建议这个操linux命令和应用程序?
linux命令和应用程序?,软件,系统,环境,管理,基础,情况,位置,电脑,工具,中心,在linux下如何装应用程序?需要什么命令啊首先从官网下载hdf5,根据linux命令输入方法?
linux命令输入方法?,系统,电脑,密码,管理,地址,命令,网站,工具,首开,位置,linux终端输入~怎么弄中间在电脑上打开需要的Word文件进入。进入到文Python中什么是反射?使用方法有哪
Python中什么是反射?使用方法有哪些?,信息,培训,状态,术语,检测,反射,属性,对象,字符串,方法,反射这个术语在很多语言中都存在,并且存在大量的Python中有哪些方法可以解压文件?
Python中有哪些方法可以解压文件?,工具,系统,工作,培训,文件,文件夹,方法,窗体,不同于,以下内容,在Python学习和日常使用中,很容易造成文件过大Python列表类型list合并有哪些方法
Python列表类型list合并有哪些方法?,培训,方法,列表,可能会,数组,切片,下文,字符串,数据类型,请看,在Python编程语言中,有各种数据类型,比如字符零基础学习Python的四种方法
零基础学习Python的四种方法,基础,代码,基础知识,培训,发展,时间,知识,书籍,初学者,练习,近年来,随着移动互联网的发展,对Python人才的需求越来pythonPandas Series对象有哪些属
pythonPandas Series对象有哪些属性?,工具,数据,数字,分析,培训,属性,数据类型,数组,对象,索引,想必大家都知道pandas,它是基于Numpy的一种工具python是面向对象还是面向过程的
python是面向对象还是面向过程的,数据,代码,基础,形态,培训,术语,设计,对象,过程,语言,Python虽然是解释型语言,但从设计之初就已经是一门面向如何在Python中定义类方法和修改类
如何在Python中定义类方法和修改类属性?,代码,方法,培训,对象,实例,定义,结果,示例,赋值,属性,Python中的类还可定义使用@classmethod修饰的类提高Python 效率的 5 种高级方法
提高Python 效率的 5 种高级方法,代码,数字,函数,有限,设备,项目,工具,培训,列表,内存,任何编程语言的高级特征通常都是通过大量的使用经验才