Bonjour ouais je pose cette question une deuxième fois, désolé à ce sujet mais je ne sais pas comment bosse précédente question. Je vais expliquer plus en profondeur mon problème dans un exemple plus complet. Au lieu d'écrire comme 300+ classes d'événements dans 300 fichiers de classe que je devrais faire si cela ne fonctionne pas, afin qu'ils puissent faire de petits travaux chronométrés comme cet exemple de travail ci-dessous dans un projet de serveur. Ce que j'essaie d'éviter, c'est d'écrire un tas de classes et d'écrire tout simplement plus compact dans la structure de tout ce sur quoi je travaille. Pour résumer, je mélange 90% de la programmation fonctionnelle et je veux donner une fonction à un événement temporisé différé, sans créer le nouvel événement chronométré dans une classe séparée puis aller et venir dans les fichiers en regardant comment tout est connecté, mais de cette façon tout peut être vu de sorte que vous pouvez trouver des bugs et ce n'est pas beaucoup plus rapide que tout est en face de vous, un peu comme l'écriture de code de boucle, mais avec retard. Tout ce que j'ai en ce moment, c'est un fil qui traite les événements, supprime les événements qui ont été arrêtés, continue à relancer les événements qui ne s'arrêtent pas après un cycle et bien sûr attendre que certains événements puissent être courus.C# S'abonner méthode dynamiquement anonyme
Si quelqu'un connaît une meilleure façon de faire ce que j'essaie de faire peut-être un système C# Event intégré? Ce qui est de préférence simple.
class Event {
private Action action;
private bool stopped;
public Event(long tick, Action action) {
this.tick = tick;
this.action = action;
this.lastRun = Environment.TickCount;
}
public void stop() {
stopped = true;
}
public bool canRun() { //blah ignore just showing what I plan to do
if (stopped)
return false;
return (Environment.TickCount - lastRun) > tick;
}
public void run() {
this.lastRun = Environment.TickCount;
action();
}
//... other methods
}
class Test {
string t;
public void setT(string t) {
this.t = t;
}
public void stuff() {
Console.WriteLine(a);
}
}
class ImportantWork {
public static void Main(string[] args) {
someDeepMethod();
}
void someDeepMethod() {
Test t = new Test();
t.setT("secondTime");
//Here is where the problem occurs.
Server.registerEvent(new Event(5000,() => {
this.stop(); //<-- Error how I call this from this new Event instance.
stop(); //<-- Also error
//Event.stop(); //<-- haha may work if it was static but thats stupid
t.stuff();
Console.WriteLine("thirdTime");
}));
t.setT("firstTime");
t.stuff();
}
}
Sortie prévue:
firstTime
... attend 5 secondes ...
secondTime
thirdTime
ne s'arrêterait pas simplement(); travail? –
Le nom 'stop' n'existe pas dans le contexte actuel. (enlever ça ne change rien) – SSpoke