为什么Environment.Exit导致LINQPad终止

问题描述:

我调试在LINQPad含有Environment.Exit(0);的程序。为什么Environment.Exit导致LINQPad终止

当这条线Environment.Exit(0);命中,LINQPad退出。

  1. 它为什么会发生? (在Visual Studio,显然只是进程终止)。
  2. 有没有一种方法可以在不更改原始来源的情况下防止这种行为?

简单的例子:在异步线程执行的代码(不锁UI)它自己的进程,所以当你运行诸如Environment.Exit指令,托管进程

void Main() 
{ 
    Environment.Exit(0); 
} 
+0

因为这就是它 - 退出过程。 Visual Studio(我假设你是指在即时窗口中)使用“_myapp_.vshost.exe”进程来执行你的命令,所以它退出这个,而不是VS本身。 – 2014-10-02 07:28:12

+2

因此,LINQPad组件与我正在调试的程序集在相同的进程上运行。 – Ofiris 2014-10-02 07:41:58

发生这种情况是因为LINQPad在与自身相同的进程中执行查询,通过应用程序域而不是进程隔离查询。

这种情况已经改变in the latest beta:LINQPad现在运行在自己的进程中每个查询。这是为即将到来的集成调试器做准备(不可能调试你自己的进程)。一个令人愉快的副作用是调用Environment.Exit(或引发*Exception)不会再使主机进程崩溃。

+0

我经常使用Linqpad,我很高兴阅读!非常感谢你,保持良好的工作! – AFract 2014-10-04 21:21:05

+0

如果我只能接受这两个很好的答案......感谢一本好书和软件。 – Ofiris 2014-10-05 04:04:59

LINQPad主机(因此Linqpad本身)也受到影响。

您可以轻松地通过运行一个长的节目,这使得一些计算检查:有在任务管理器中没有新的进程,并linqpad进程的CPU使用率,根据计算提高。

你可以调整在与例如应用领域的高级选项的几件事情,但据我所知是没有办法避免这种行为,因为Linqpad完全靠这种方式来执行代码。

+0

+1,感谢您的解释,这正是我的想法,请注意,这将在即将发布的版本中发生变化。 – Ofiris 2014-10-04 12:09:13