gpt4 book ai didi

c# - 使用来自 C# .NET 的 OCX 的线程安全

转载 作者:行者123 更新时间:2023-11-30 12:35:41 29 4
gpt4 key购买 nike

作为开发人员,我已经有一段时间没有使用 OLE/COM,但我目前需要使用 C# 程序中的一些第 3 方 OCX 代码库。

C# 程序使用线程(它是一个 TCP 套接字服务器)。 OCX 被标记为单元线程模型。根据我的阅读,我得出结论,如果我小心地为每个线程创建每个 OCX 的一个实例,并且只从创建它的线程使用该实例,我应该没问题。

我也做过:-

myThread.SetApartmentState(ApartmentState.STA);

在开始每个线程之前。

这是否足以确保安全使用 OCX?

我看到的症状是线程都可以创建 OCX,但在明显随机的基础上,准备和初始化 OCX 的调用失败。他们似乎没有返回任何有用的信息来说明原因。

任何人都可以解释我所看到的,或者给我一个从线程代码中安全使用这些 OCX 的指南吗?

或者,我是否应该放弃并在一个线程中创建每个和所有 OCX 的单个实例,并通过线程安全队列或类似方式将所有调用发送给它们?

最佳答案

将组件标记为 Apartment threaded 只是组件开发人员的断言。周围有很多不了解线程的组件开发人员,即使那些了解线程的人有时也会弄错,所以相信这个断言是一种信仰行为。

出于这个原因,我个人对在多线程环境中使用第 3 方组件非常谨慎。除了那些我知道在多线程应用程序中有非常广泛的接触,和/或我知道我可以获得足够支持的人。

如果您无法获得组件开发人员的支持或组件的源代码,并且您绝对需要使用它,那么创建单个实例的选项可能是一个很好的实用解决方案。

关于c# - 使用来自 C# .NET 的 OCX 的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4972325/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com