Подскажите, пожалуйста, как можно выполнить метод из загруженной сборки в отдельном потоке?
Есть такой код:
1. string sAssembly = "c:\assemblies\assembly.dll";
2. string sType = "MyNamestapce.MyType";
3. string sMethodName = "PublicStaticParametrizedMethod";
4. Assembly asmDLL;
5. Thread thread1;
6. asmDLL = Assembly.LoadFile(sAssembly);
7. thread1 = new Thread(new ParameterizedThreadStart(asmDLL.GetType(sType).GetMethod(sMethodName)));
Компилятор ругается на седьмую строчку кода, говорит:
Method name expected
Здравствуйте, PaiL, Вы писали:
PL>Компилятор ругается на седьмую строчку кода, говорит:
PL>Method name expected
thread1 = new Thread((ParameterizedThreadStart)Delegate.CreateDelegate(typeof(ParameterizedThreadStart), asmDLL.GetType(sType).GetMethod(sMethodName)));
Здравствуйте, PaiL, Вы писали:
PL>Подскажите, пожалуйста, как можно выполнить метод из загруженной сборки в отдельном потоке?
PL>Есть такой код:
PL>PL>1. string sAssembly = "c:\assemblies\assembly.dll";
PL>2. string sType = "MyNamestapce.MyType";
PL>3. string sMethodName = "PublicStaticParametrizedMethod";
PL>4. Assembly asmDLL;
PL>5. Thread thread1;
PL>6. asmDLL = Assembly.LoadFile(sAssembly);
PL>7. thread1 = new Thread(new ParameterizedThreadStart(asmDLL.GetType(sType).GetMethod(sMethodName)));
PL>
PL>Компилятор ругается на седьмую строчку кода, говорит:
PL>Method name expected
И правильно делает
Конструктор делегата ожидает MethodHandle а ты ему подсовывеш MethodInfo.
Сделай нормальный класс воркер.
class Worker
{
private MethodInfo _method;
private object[] _args;
public Worker(MethodInfo mi, params object[] args)
{
_method = mi;
_args = args;
}
public void Run()
{
_mi.Invoke(null, args);
}
}
string sAssembly = "c:\assemblies\assembly.dll";
string sType = "MyNamestapce.MyType";
string sMethodName = "PublicStaticParametrizedMethod";
Assembly asmDLL;
Thread thread1;
asmDLL = Assembly.LoadFile(sAssembly);
Worker w = new Worker(asmDLL.GetType(sType).GetMethod(sMethodName), args);
thread1 = new Thread(new ThreadStart(w.Run));
... << RSDN@Home 1.2.0 alpha rev. 644>>
Здравствуйте, migel, Вы писали:
Ненужное переусложнение. Если уж хочется через рефлекшн, то можно вот так:
MethodInfo mi = asmDLL.GetType(sType).GetMethod(sMethodName);
thread1 = new Thread((ThreadStart)delegate{mi.Invoke(null, null);});
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, migel, Вы писали:
L>Ненужное переусложнение. Если уж хочется через рефлекшн, то можно вот так:
L>L>MethodInfo mi = asmDLL.GetType(sType).GetMethod(sMethodName);
L>thread1 = new Thread((ThreadStart)delegate{mi.Invoke(null, null);});
L>
По первости не нужное, а когда начинаються пляски с бубном по поводу несоотвествия параметров, их конвертации и прочее
воркер само то
.
... << RSDN@Home 1.2.0 alpha rev. 644>>