는이 같은 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);
}
구현은 다음과 같습니다
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
어떤 방법도 나는 EXC 상승하는 호출자 방법 pipeServer_MessageReceived
에서 대상 방법 Do_pipeServer_MessageReceived
의 구현을 대체 할 수 없습니다 eption, 그래서 당신의 제안은 무엇입니까?
왜 호출해야합니까? 어떤 스레드에서 호출하고 있습니까? – Lloyd
@Lloyd 업데이트 질문 – Saeid
@romkyns 님이 질문에 답변했습니다. PipeServer.MessageReceivedHandler를 직접 호출하는 것이 아니라 UI의 일부를 업데이트하는 경우이 인스턴스에서 Invoke를 호출하면됩니다. – Lloyd