如何调用无控件类中的某些方法

时间:2012-01-09 11:15:13

标签: c# named-pipes invoke

我使用一些委托和事件来实现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 Class(继承自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任何方法,而且我也无法在Invoker方法中替换目标方法Do_pipeServer_MessageReceived的实现{ {1}}会引发异常,那你的建议是什么?

1 个答案:

答案 0 :(得分:3)

有两种可能性:你需要在GUI线程上调用回调,否则就不需要。

如果您没有触摸该回调中的GUI,则不要打扰调用。

如果你触摸GUI,那么你必须根据定义引用你正在更新的某些控件。在该控件上调用Invoke。你调用Invoke的控件真的无关紧要;他们都会做同样的事情。