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