【问题标题】:How to schedule execution immediately after current execution?如何在当前执行后立即安排执行?
【发布时间】:2018-03-03 08:30:03
【问题描述】:

如果我在当前执行的方法中启动System.Threading.Timer,该方法将继续执行并返回主方法,Timer.Tick 事件将在不久的将来触发(基于计时器的持续时间)。出于我的目的,我需要类似计时器之类的东西,但持续时间将根据完成执行当前方法所需的时间来计算,即 Tick 在当前方法返回后直接执行。

有没有办法“安排”一个方法在当前方法执行后立即开始,然后再返回到主方法?

编辑:这是我正在尝试解决的问题。

一个System.Windows.Controls.TreeviewItem包含一个事件TreeviewItem.Collapsed,它在之前布局内部调用,正如我们在OnIsExpandedChanged方法中看到的hereitem.UpdateVisualState()被调用在调用事件之后。因此,我不能使用更新的布局来重新定位我的控件。 IMO 该事件应称为OnCollapsingBeginCollapsed

我需要折叠来完成执行,然后给我一个使用新状态的机会。

【问题讨论】:

  • 也许使用BackgroundWorker。完成后,您可以运行任务。
  • 可以在方法的最后一行启动定时器吗?这似乎符合列出的标准,除非您需要它以相同的时间间隔(您希望它开始和方法结束)继续触发。
  • 难以理解您的要求,不妨尝试列出示例序列?
  • 如果您解释了您要完成的工作,而不是 you are trying to do,这真的会有所帮助。
  • @DourHighArch 添加了理由。

标签: c#


【解决方案1】:

不,没有办法创建/调度可以“在当前方法返回后直接”插入的回调。这样做的能力需要在运行时修改调用堆栈,这通常不会被任何运行时公开。

可能还有其他方法可以实现您可能正在寻找的实际功能。 IE。可以使用自动生成的接口包装器来测量方法的时间,类似于 Unity 拦截器的工作方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    相关资源
    最近更新 更多