Я хочу узнать немного больше о том, как на самом деле работают события.
Моя цель: я хочу реализовать своего рода планирование. У меня есть набор операций, которые должны быть сделаны в разных местах. В моем процессе планирования я хочу посмотреть на определенные состояния операций и назначить их там. Как на самом деле работает планирование, на самом деле не важно. В определенных точках процесса вызывается событие, когда создается новая операция или, например, выполняется операция. Каждый раз, когда вызывается это событие, я запускаю свой алгоритм планирования и ищу новые назначения.
Моя проблема: я не знаю, как эти события действительно влияют на мой рабочий процесс. В определенный момент операция A находится в начале моего планирования в состоянии (выполняется) и в более поздней точке в состоянии (завершено), что делает планирование довольно трудным. Я не хочу, чтобы государства менялись во время этого процесса. Я думаю, что события вызывают проблему, и теперь, чтобы найти решение, я хочу больше узнать об этих событиях. Как это работает?
Я слышал что-то вроде: если вызывается событие, мой текущий процесс прерывается, событие обрабатывается, а затем мой текущий процесс продолжается. Так они работают?
И если да, то как выглядит следующий сценарий:
расписание выполнения ()> прерывание (новая операция)
Этот вызов события теперь снова вызывает schedule ()> run schedule () (2)
Теперь завершится ли сначала расписание () (2), которое вызывается в событии, затем завершится событие и затем исходное расписание ()?
И кроме того, есть ли хороший способ обрабатывать такой рабочий процесс с событиями? стандартная процедура или что-то? Или события там не проблема, а у меня где-то еще проблема?
Могу ли я попросить программу не прерывать этот рабочий процесс? Должен ли я запустить schedule () в потоке самостоятельно?
Спасибо за ваше время
Упрощенная версия кода:
public void schedule()
{
//Do the scheduling process (1)
if (this.scheduleChanged != null)
{
this.scheduleChanged(this, EventArgs.Empty);
}
//Show debuginformation (3)
}
//Gets called in schedule after all operations are assigned to a location
public void EndOfScheduleEvent()
{
//Let operations run on assigned locations
//switch state of operation to running (2)
}
//When an operation is finished it causes an event, which calls this method
//This method calls again the schedule() method for reschedule
public void endOfOperationEvent()
{
//change state of operation to pause
schedule();
}
Я много печатаю для отладки. И что я обнаружил, это то, что операция, которая начинается в состоянии (готово) в (1) в коде. Теперь я запускаю событие scheduleChanged (). Что я хочу знать, так это то, что метод schedule () продолжается. так что у меня будет для этой операции на (3) в коде состояние (готово). Но происходит то, что событие вызывается напрямую, поэтому мой текущий процесс прерывается. Итак, мы сейчас находимся в методе EndOfScheduleEvent (), который меняет состояние моей операции на (выполняется) (2) в коде. и затем продолжается снова в моем методе schedule (), где мой вывод в (3) (выполняется) для моей операции.