Vous devez changer la ligne comme suit:
Thread clsUDPThread = new Thread(new ThreadStart(delegate() { clsUDP.UDPListen(64000, typeof(ServerClass)); }));
Bien que, seul type d'accepter ne résoudra pas votre problème - vous devez accepter en fait l'instance (objet) du type (en supposant vouloir invoquer des méthodes/propriétés d'instance). Le meilleur moyen serait d'accepter une interface que votre type de cible doit implémenter.
EDIT:
Ok - voici comment vous pouvez utiliser une interface.
public interface IUDPListener
{
void Notify(string status);
}
En classe UDP,
public void UDPListen(int UDPPort, IUDPListener listner)
{
...
listener.Notify("bla bla");
...
}
public class ServerClass : IUDPListener
{
...
public void Notify(string status)
{
// Callback from thread
...
}
// Method that starts thread
public void StartThread()
{
UDPClass clsUDP = new UDPClass();
Thread clsUDPThread = new Thread(new ThreadStart(delegate() { clsUDP.UDPListen(64000, this); }));
clsUDPThread.Start();
}
}
Vous pouvez également utiliser un délégué pour ces notifications si son simple de rappel d'une méthode. Avec l'interface, vous pouvez définir plusieurs rappels ainsi que des méthodes/propriétés pour interroger l'écouteur si nécessaire. Voici l'exemple de code utilisant délégué
En classe UDP,
public void UDPListen(int UDPPort, Action<string> callback)
{
...
callback("bla bla");
...
}
En classe serveur
public class ServerClass
{
...
private void UdpCallback(string message)
{
...
}
// code to start thread
UDPClass clsUDP = new UDPClass();
var clsUDPThread = new Thread(new ThreadStart(delegate() {clsUDP.UDPListen(64000, UdpCallback); }));
clsUDPThread.Start();
@Kris, voir mon édition! – VinayC