なしのコントロールクラスの内部でいくつかのメソッドを呼び出します:どのように私はこのような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オブジェクトから継承されます)でこのイベントを使用した場合の実装は次のとおりです。
EXCを上昇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
の実装を置き換えることはできませんeption、あなたの提案は何ですか?
なぜそれを呼び出す必要がありますか、どのスレッドから呼び出すのですか? – Lloyd
@Lloyd更新の質問 – Saeid
@romkynsが質問に答えました。 PipeServer.MessageReceivedHandlerを直接呼び出すだけでなく、UIの一部を更新している場合は、このインスタンスでInvokeを呼び出す必要があります。 – Lloyd