Когда я запускаю ваш пример, он печатает «ProcessExit», чтобы он работал.Причина, по которой «CancelKeyPress» не печатается, заключается в том, что приложение, вероятно, завершает работу до того, как оно произойдет (и вам также необходимо зарегистрировать обработчик до ReadLine
).Следующее действие отменит первые 10 Ctrl + C
нажатий и затем завершит работу на следующем:
Console.CancelKeyPress.Add(fun arg ->
printfn "CancelKeyPress"; arg.Cancel <- true )
for i in 0 .. 10 do
System.Console.ReadLine() |> ignore
В любом случае, одним простым вариантом, который должен сработать, будет завершение всей функции main
внутри try .. finally
.Что-то вроде:
let main (args) =
try
// run the application
finally
// finalization code here
РЕДАКТИРОВАТЬ Когда я запускаю ваш второй пример, я получаю файл с:
Starting a Test 2
Try Finally
ProcessExit
Я не уверен, почему DomainUnloaded
не был напечатан, но остальные должны работать как положено.