0
我使用了一些代表和事件来实现这样了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);
}
当我在Form类使用此事件(从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
任何方法,也是我不能代替在祈求方法pipeServer_MessageReceived
实现目标的方法Do_pipeServer_MessageReceived
的是上升的EXC eption,那么你的建议是什么?
为什么你需要调用它,你调用了哪个线程? – Lloyd 2012-01-09 11:24:18
@劳埃德更新问题 – Saeid 2012-01-09 11:32:42
@romkyns已回答了问题。如果您不是直接调用PipeServer.MessageReceivedHandler,而只是更新UI的某些部分,则只需在此实例中调用Invoke。 – Lloyd 2012-01-09 11:46:51