#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
Казалось бы, у вас есть эти базовые элементы, и вы могли бы соответствующим образом адаптировать это решение.