Я использую некоторые делегаты и события для реализации NamedPipes, например:
public delegate void MessageReceivedHandler(byte[] message, Client client);
public event MessageReceivedHandler MessageReceived;
void ListenForClients() {
//Do some
Thread readThread = new Thread(Read) { IsBackground = true };
}
void Read(object clientObj) {
//Do Some
if(MessageReceived != null)
MessageReceived(ms.ToArray(),client);
}
Когда я использую это событие в классе формы (унаследованном от объекта Control), реализация:
public partial class Form1 : Form {
public Form1(){
pipeServer.MessageReceived += pipeServer_MessageReceived;
}
void pipeServer_MessageReceived(byte[] message, PipeServer.Client client) {
Invoke(new PipeServer.MessageReceivedHandler(Do_pipeServer_MessageReceived),
new object[] { message, client });
}
public void Do_pipeServer_MessageReceived(byte[] message, PipeServer.Client client) {
// Do Some
}
}
Но когда я хочу использовать это в некоторых других классах, которые не унаследованы от управляющего объекта, я не могу Invoke
никакие методы, а также не могу заменить реализацию целевого метода Do_pipeServer_MessageReceived
в методе Invoker pipeServer_MessageReceived
, который вызывает исключениетак что вы предлагаете?