Мне бы хотелось вызвать метод crossappdomaindelegate с именем метода, которому нужен параметр.Как вызвать метод crossappdomaindelegate с параметрами
Пример:
myAppdomain.DoCallback(new CrossAppDomainDelegate(MyMethod));
private static void MyMethod(string myParam)
{
Console.Write("my param="+ myParam);
}
как я могу передать параметр в новом CrossAppDomainDelegate (MyMethod ....)?
Update: Просто, чтобы завершить ответ Маартен к моему конкретному случаю: я также добавьте ResolveHandler найти уже загруженные сборки. Просто, если у кого-то есть подобные проблемы.
_myNewAppDomain.AssemblyResolve += MyResolveEventHandler;
public static Assembly MyResolveEventHandler(Object sender, ResolveEventArgs args)
{
var dllName = args.Name.Split(',')[0];
var currentAppdomain = (AppDomain) sender;
var file = currentAppdomain.GetAssemblies().FirstOrDefault(f => f.FullName.Split(',')[0] == dllName);
return file;
}
Вы не можете сделать это напрямую - делегат не предоставляет никаких параметров. Лично я обычно использую [this] (http://msdn.microsoft.com/en-us/library/3c4f1xde.aspx) и вызываю метод-экземпляр непосредственно в другом «AppDomain». Кроме того, см. [Здесь] (http://stackoverflow.com/questions/6242573/simplest-way-to-make-cross-appdomain-call) – Maarten
спасибо за ваш ответ. Я также использую CreateInstanceAndUnwrap, но прежде чем я должен узнать точное имя класса сборки -> мне нужно сначала загрузить сборку (в другом приложении), чтобы узнать, какие типы там -> загрузили их через DoCallback. Или есть ли лучшие способы узнать имя класса сборки? возможно, вы можете поделиться некоторым кодом? Я знаю только, что они реализуют один из моих трех интерфейсов. best С уважением –
Я добавил ответ с примера. – Maarten