单线程应用程序的重入

时间:2012-11-17 21:39:27

标签: .net asynchronous com thread-safety activex

在.NET 4.0上编写Winforms应用程序(使用VB2010)。它有一个表单,包括一个ActiveX COM控件异步引发事件。事件由表单代码文件上的钩子函数处理。应用程序不会启动任何线程(主要的线程除外)。

我应该防范事件处理程序的重入吗? 在正在执行事件 A 的钩子函数时,是否可以调用事件 B 的钩子函数?

{搜索网络已经提出了几个相互矛盾的答案。我在这里很困惑......}

2 个答案:

答案 0 :(得分:2)

ActiveX控件与.NET控件没有任何不同。无论你在事件中做什么影响控件的事件处理程序肯定会引发另一个事件。或者事件A可能会再次被提升。另一个事件很少会引起麻烦,但后一种情况通常会导致此站点的名称异常。并且你以相同的方式修复它,一个阻止重新进入的bool字段。

潜在的机制是相同的。 ActiveX控件也可以在属性设置器中触发事件。这与线程或单线程公寓没有任何关系。

答案 1 :(得分:1)

在不知道涉及哪个ActiveX控件和哪些事件的情况下,答案只能是相当普遍的:

你应该始终以优雅的方式处理任何重入 您可以“丢弃”任何重新进入或者您可以并行处理它们或者您可以“排队”它们并一个接一个地处理它们......

如果没有进一步的细节,我认为没有办法更具体: - (