1

我有一个 Windows 服务,它DllImport在不同的线程中运行非托管代码(使用)。

有时,非托管代码“挂起”。想想while (true) ;。发生这种情况时,我需要终止整个进程(它会自动启动另一个进程,因为它是 Windows 服务)。

是否Environment.Exit(int)足够?或者我需要例如Environment.FailFast(string)

编辑:我无法“测试”这个。冻结是随机发生的。

4

2 回答 2

1

是的。Environment.Exit将杀死当前进程中运行的所有线程,包括主线程(和进程本身)。

Environment.FailFast会将事件记录到应用程序日志中,然后终止进程和当前进程中的所有线程。

于 2019-08-27T14:18:30.153 回答
1

从微软官方文档中,Environment.Exit

终止此进程并向操作系统返回退出代码。

更有用的是,文档继续说明:

  • 退出总是终止应用程序
  • Exit 会立即终止应用程序,即使其他线程正在运行

听起来Environment.Exit完全可以满足您的需求。

于 2019-08-27T14:22:21.950 回答