【问题标题】:How do I write an exit handler for an F# application?如何为 F# 应用程序编写退出处理程序?
【发布时间】:2010-07-30 04:46:08
【问题描述】:

主题说明了一切。

如果我的应用程序被 ^C 终止,我希望运行一些代码。

【问题讨论】:

  • 只是一个想法——尽管您询问的是 F#,但您可能会在 Google 上搜索“.Net Application Termination Event”并找到有关如何正确处理此类问题的一般问题的更多信息。

标签: .net f# exit-handler


【解决方案1】:

使用AppDomain.ProcessExit (http://msdn.microsoft.com/en-us/library/system.appdomain.processexit.aspx):

System.AppDomain.CurrentDomain.ProcessExit.Add(fun _ -> ...)

【讨论】:

  • 也许 ProcessExit (msdn.microsoft.com/en-us/library/…) 将更适合正常进程终止的情况。在简单的控制台示例 System.AppDomain.CurrentDomain.ProcessExit.Add(fun _ -> printfn "ProcessExit") System.AppDomain.CurrentDomain.DomainUnload.Add(fun _ -> printfn "DomainUnload") 它在退出后输出“ProcessExit”。
  • 绝对!我怎么能错过呢?
【解决方案2】:

见下面的代码。要在控制台应用程序中处理 Ctrl-C,请使用 Console.CancelKeyPress 事件。

// does not work - no exception on Ctrl-C
//System.AppDomain.CurrentDomain.UnhandledException.Add(
//    fun _ -> printfn "app is about to die")

System.Console.CancelKeyPress.Add(
    fun _ -> printfn "app is about to die")
printfn "starting..."
System.Threading.Thread.Sleep(5000)  // press Ctrl-C
printfn "ended"

【讨论】:

  • 请注意,这只处理 ^C 终止,而不是任意进程退出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
相关资源
最近更新 更多