C# 中是否会发生本机异常规避?
在 C# 中使用外部非托管库时,必须考虑面临以下情况的可能性:源自这些库深处的本机异常。
Can Standard尝试...捕获捕获本机异常?
幸运的是,C# 也提供了捕获本机异常的机制。问题是:标准的 try...catch 块可以在不进行任何修改的情况下处理这些非托管异常吗?
答案:捕获本机异常
要捕获本机异常,您可以使用 Win32Exception 类。它提供了一个名为 NativeErrorCode 的属性,允许您检查错误代码并相应地处理特定情况。
例如,考虑以下代码片段:
const int ERROR_FILE_NOT_FOUND = 2; const int ERROR_ACCESS_DENIED = 5; const int ERROR_NO_APP_ASSOCIATED = 1155; void OpenFile(string filePath) { Process process = new Process(); try { // Calls native application registered for the file type // This may throw a native exception process.StartInfo.FileName = filePath; process.StartInfo.Verb = "Open"; process.StartInfo.CreateNoWindow = true; process.Start(); } catch (Win32Exception e) { if (e.NativeErrorCode == ERROR_FILE_NOT_FOUND || e.NativeErrorCode == ERROR_ACCESS_DENIED || e.NativeErrorCode == ERROR_NO_APP_ASSOCIATED) { MessageBox.Show(this, e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } }
在此示例中,我们尝试启动与特定文件类型关联的本机应用程序。如果应用程序无法启动,则会引发 Win32Exception 以及关联的错误代码。 catch 块中的 if 语句检查特定错误代码并显示相应的消息。
以上是标准 C# try...catch 块可以处理来自非托管库的本机异常吗?的详细内容。更多信息请关注PHP中文网其他相关文章!