我想进一步了解事件的实际工作方式。
我的目标:我想实施一种调度。我有一组操作必须在不同的位置进行。在调度过程中,我想查看操作的某些状态并将其分配到该位置。实际计划的工作原理实际上并不重要。在过程中的某些点,例如,当创建新操作或完成某操作时,将调用一个事件。每当调用此事件时,我都会运行调度算法,并寻找新的任务。
我的问题:我不知道这些事件实际上如何影响我的工作流程。在某个时刻,操作A在我的计划开始时处于状态(运行),而在以后的某个时刻处于状态(完成),这使得计划非常困难。我不希望在此过程中切换状态。我认为这些事件正在引起问题,现在我想找到一个解决方案,我希望对这些事件有更多的了解。如何运作?
我听到类似的消息,如果调用了一个事件,则我的当前进程被中断,该事件被处理,然后我的当前进程将继续。他们是这样工作的吗?
如果是,则以下szenario的外观如何: 运行schedule()>中断(新操作) 现在,此事件调用再次调用schedule()>运行schedule()(2)
现在首先在事件中调用schedule()(2)完成,然后事件将结束,然后是原始schedule()吗?
此外,还有一种很好的方法来处理带有事件的工作流吗?一个标准的程序或什么?还是事件在那里没有问题,而我在其他地方有问题?
我可以告诉Progam不要中断此工作流程吗?我是否应该自己在线程中运行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)中的输出用于(运行)我的操作。