Я думаю, вы должны изменить свою точку зрения на то, как работают события. OtherClass должен «владеть» событием и запускать его. ClassLibrary или ClientApplication (в зависимости от того, что вы выберете) «слушает» событие, «подписавшись» на него, и выполняет определенное действие при возникновении этого события.
Как это реализовать:
public class ClassLibrary
{
public OtherClass myOtherCl;
public ClassLibrary()
{
myOtherCl= new OtherClass();
myOtherCl.Start();
}
}
Запустить событие в классе, где оно логически происходит, где оно обнаружено.
public class OtherClass : Form
{
public event EventHandler DeviceAttached;
public Start()
{
// do things here to initialize receiving messages
}
protected override void WndProc (ref message m)
{
if (....)
{
OnDeviceAttach();
}
base.WndProc(ref m);
}
public void OnDeviceAttach()
{
if (DeviceAttached != null)
DeviceAttached ();
}
}
Наконец, тому, кому нужно прослушать событие, нужен доступ к экземпляру класса, содержащего событие, поэтому в этом примере myOtherCl был обнародован.
public class ClientApplication
{
void main()
{
ClassLibrary myCL = new ClassLibrary();
myCL.myOtherCl.DeviceAttached += new EventHandler(myCl_deviceAttached);
}
void myCl_deviceAttached(object sender, EventArgs e)
{
//do stuff...
}
}