Я думаю, что ваш код будет проще поддерживать в будущем, если вы вместо этого извлечете интерфейс из ReportManager в интерфейс, на который могут ссылаться обе сборки. Но если это не вариант для вас, я думаю, что вы пытаетесь достичь чего-то вроде этого:
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
AttachEventHandler(backgroundWorker1,
Type.GetType("WindowsFormsApplication1.EventHandlers"),
"RunWorkerCompleted");
backgroundWorker1.RunWorkerAsync();
}
private void AttachEventHandler(BackgroundWorker bgw, Type targetType,
string eventHandlerMethodName)
{
object targetInstance = Activator.CreateInstance(targetType);
bgw.RunWorkerCompleted +=
(RunWorkerCompletedEventHandler)Delegate.CreateDelegate(
typeof(RunWorkerCompletedEventHandler),
targetInstance, eventHandlerMethodName);
}
}
public class EventHandlers
{
public void RunWorkerCompleted(object sender,
System.ComponentModel.RunWorkerCompletedEventArgs e)
{
// do something
}
}
}
Обратите внимание, что между Form1
и EventHandlers
классом нет «жесткой» ссылки, так что это может быть любой другой класс, находящийся в любой другой сборке; обработчик событий создается и присоединяется на основе имени типа и имени метода (который, естественно, должен иметь правильную подпись).