VB.NET : Как преобразовать строку в имя метода?

#vb.net #multithreading

#vb.net #многопоточность

Вопрос:

У меня есть имя моего метода в виде строки (в конечном итоге я буду читать из файла). На данный момент к методу можно получить доступ с помощью AIModule.Main, затем он будет запущен как другой поток. Пока у меня есть это:

 Dim MyMethod As System.Reflection.MethodInfo = Me.GetType().GetMethod("AIModule.Main")
AIThread = New System.Threading.Thread(AddressOf MyMethod)
  

Но это не работает, так как оператору AddressOf нужны только имена. Как бы мне сделать так, чтобы я получал имя метода или даже адрес метода?

Спасибо.

Комментарии:

1. Вы могли бы изучить возможность создания делегата ThreadStart, как описано Джоном Скитом в аналогичном обсуждении, на которое я ссылался здесь. Хотя это обсуждение основано на C #, я считаю, что концепции могут быть переведены на VB.NET . bytes.com/topic/net/answers /…

2. Вы должны вызвать myMethod. Вызвать(). Проще всего это сделать с помощью лямбда-выражения: New Thread(Sub() MyMethod.Invoke(Me, Nothing)) . Если метод является общим, то ничего не передавайте вместо меня.

3. Может ли быть полезен новый оператор NameOf() по сравнению с 2015 годом?

Ответ №1:

Учитывая полное раскрытие информации, что это взято из сообщения Джона Скита, предложенного в ответ на аналогичный вопрос на другом форуме, его предлагаемым решением этой проблемы было бы создание делегата ThreadStart подобным образом (источник C # здесь):

 ThreadStart ts = (ThreadStart) Delegate.CreateDelegate
 (typeof (ThreadStart), methodInfo);
  

Грубая адаптация VB из вашего источника может выглядеть как (внимание — непроверено! — предлагается для иллюстрации):

 Dim MyThreadStart as ThreadStart = Delegate.CreateDelegate(GetType(ThreadStart), MyMethod) as ThreadStart
  

Казалось бы, у вас есть эти базовые элементы, и вы могли бы соответствующим образом адаптировать это решение.

Оригинальная тема с обсуждением Джона Скита здесь