Здравствуйте, да, я задаю этот вопрос второй раз, извините за это, но я не знаю, как поднять предыдущий вопрос. Я объясню более подробно мою проблему в более законченном примере.
Вместо того, чтобы писать как 300+ Классы событий в 300 файлах классов, которые мне, возможно, придется сделать, если это не сработает, поэтому они могут выполнять небольшие синхронизированные задания, как, например, в этом примере ниже в серверном проекте.
Чего я пытаюсь избежать, так это написания нескольких классов и просто пишу все более компактно в структуре того, над чем я работаю.
Подводя итог, я смешиваю 90% функционального программирования и хочу дать некоторой функции какое-то отложенное временное событие, не создавая новое временное событие в отдельном классе, затем бегая туда-сюда по файлам, просматривая, как все связано вверх, но таким образом все можно увидеть, так что вы можете находить ошибки и еще много чего быстрее, так как все прямо перед вами, вроде как при написании кода цикла, но с задержкой.
Все, что у меня есть сейчас, - это один поток, который обрабатывает события, удаляет остановленные события, продолжает перезапускать события, которые не прекращаются после одного цикла, и, конечно, ждет, пока не будут запущены некоторые события.
Если кто-нибудь знает лучший способ сделать то, что я пытаюсь сделать, может быть, какая-то встроенная система событий C #? Что предпочтительно, просто.
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();
}
}
Ожидаемый результат:
firstTime
... ждет 5 секунд ...
SecondTime
thirdTime