如何使Activator.CreateInstance线程化

时间:2011-11-05 00:01:43

标签: vb.net reflection service

我有一些在多线程类中运行的代码 基本上我创建了许多包含这个类的实例的线程。

在这个类中,我使用反射创建一个vb6或.net dll的对象,然后我调用该对象中的方法。被调用的对象每次都可以不同。

但是出于某种原因,即使通过我有多个线程,当我到达Activator.CreateInstance时,它不再是多线程的。这是为什么?我该如何解决?

我想捕获返回的错误并将其放入日志中。

            If UCase(pRow("TypeVB6").ToString()) = "TRUE" Then
                classType = Type.GetTypeFromProgID(ClasstoInstantiate, True)
            Else
                classType = Type.GetType(ClasstoInstantiate, True)
            End If

            Dim o As Object = Activator.CreateInstance(classType)
            cError = classType.InvokeMember(MethodName, BindingFlags.InvokeMethod Or BindingFlags.Instance Or BindingFlags.Public, Nothing, o, New Object() {FilePath, VirtDir})

1 个答案:

答案 0 :(得分:1)

解决方案的一些想法:

1)验证服务的主要入口点是否使用MTAThread Attribute

进行修饰

2)在SyncLock statement中包装Activator.CreateInstance调用(可能还有以下InvokeMember方法)。