当改变现有工程的线程模式时,如果工程使用了单线程 ActiveX 控件,则会产生一个错误。Visual Basic 禁止在使用单元线程的工程中使用单线程控件。
通过更改“线程模式”选项并重新编译工程,就可以为现有的工程添加单元线程化功能。更改“线程模式”选项的操作可以参见“为工程选择线程模式”中的说明。对于很多工程而言,这就是所需的全部操作。如果一个现有的 ActiveX DLL、ActiveX EXE、或 ActiveX 控件工程使用了具有单线程成分的控件,那么把“线程模块”的设置改成“单元线程”就会产生一个错误。由于单线程的 ActiveX 控件在多线程客户应用程序中会引起大量严重的问题,因此 Visual Basic 不允许在 ActiveX 部件工程中使用它们。 如果现有的工程使用了单线程的控件,那么请与代理商联系,以了解是否有单元线程化的版本。强制使用单线程控件 
通过手工编辑 .vbp 文件,有可能能骗过 Visual Basic,从而在一个单元线程化的工程中可以使用单线程控件。请不要这么做。单线程 ActiveX 控件可能导致的问题包括: 如果用户通过 TAB 键聚焦到窗体上的一个单线程的控件上,且这个窗体是运行在不同的线程上的,那么用户将无法再从这个控件上通过 TAB 键将焦点移走。出现这种情况是因为单线程控件的线程中没有关于这个窗体的线程中焦点的上下文。在这种情况下,用户要改变焦点的唯一方法就是通过鼠标。将单线程控件作为单元线程化控件的一个元素使用也会导致类似的问题。 
在多线程应用程序中,如果窗体处于不同的线程中,那么无法通过单击一个单线程控件来激活该窗体。在单击单元线程化控件的单线程元素时也会出现这种情况。 
在多线程应用程序中使用单线程 OCX 会产生性能上的问题,因为 OCX 提供的所有控件必须在同一个线程中运行。这就是说,对于运行在不同线程中的窗体上的控件,所有的通信都需要昂贵的交叉线程调用。使用单线程元素控件的单元线程化 ActiveX 控件也会导致类似的性能问题。 
在多线程应用程序中, TAB 键和访问键(例如Alt+A )对于不在应用程序主线程中的单线程控件来说都是无效的。使用单线程控件元素的单元线程化 ActiveX 控件也会有同样的问题。 
如果单元线程化控件设置了单线程控件元素的 Picture 属性(或者带有 Picture 对象的其它属性),多线程的客户应用程序将会出现错误。这是因为在线程之间无法调度 Picture 对象。 
重点 在用 Visual Basic 或其它开发工具建立的所有多线程部件或应用程序中,单线程控件都可能导致这样或那样的问题。在一个单一线程的 DLL 中不能使用页面设计器。要创建一个DHTML应用程序,必须设置工程为单元线程。在“工程属性”对话框的“通用”选项卡中设置它。