Как сделать Activator.CreateInstance многопоточным - PullRequest
0 голосов
/ 05 ноября 2011

У меня есть код, который работает в многопоточном классе.
В основном я создаю много потоков, которые содержат экземпляр этого класса.

Внутри этого класса я создаю объект в dll vb6 или .net, используя отражение, затем вызываю метод в этом объекте. Вызываемый объект может каждый раз меняться.

Но по какой-то причине, даже когда у меня есть несколько потоков, когда я добираюсь до 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 Ответ

1 голос
/ 05 ноября 2011

Пара идей для решения:

1) Убедитесь, что главная точка входа для вашего сервиса украшена атрибутом MTAThread

2) ОбернитеВызов Activator.CreateInstance (и, возможно, следующий метод InvokeMember) в операторе SyncLock .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...