【发布时间】:2014-05-06 06:12:16
【问题描述】:
我有点沮丧,试图找出在 C# 中使用 try-catch 语句处理异常的最佳途径是什么。我想要代码,所以如果在尝试打开注册表项时抛出异常,那么它将继续到下一个注册表项。我能想到的唯一方法是将每个函数调用封装在一个 try-catch 语句中,但对我来说,这样做似乎还有很长的路要走。
- 还有其他方法可以做到这一点吗?
- 您能否将所有代码包含在单个 try-catch 语句中,并且当发生异常时,是否将其移至下一行代码(如跳过)?
- 我知道这可能是否定的,但是如果在参数中设置了变量,可以使用
ScanSubKey函数来检查异常吗?
没有 try-catch 语句
ScanSubKey(Registry.ClassesRoot);
ScanSubKey(Registry.LocalMachine.OpenSubKey("SOFTWARE"));
ScanSubKey(Registry.CurrentUser.OpenSubKey("SOFTWARE"));
if (Is64BitOS)
{
ScanSubKey(Registry.ClassesRoot.OpenSubKey("Wow6432Node"));
ScanSubKey(Registry.LocalMachine.OpenSubKey("SOFTWARE\\Wow6432Node"));
ScanSubKey(Registry.CurrentUser.OpenSubKey("SOFTWARE\\Wow6432Node"));
}
示例
try {
ScanSubKey(Registry.ClassesRoot);
}
catch (Exception ex) {
Debug.WriteLine("The following error occurred opening a registry key: " + ex.Message);
}
try {
ScanSubKey(Registry.LocalMachine.OpenSubKey("SOFTWARE"));
}
catch (Exception ex) {
Debug.WriteLine("The following error occurred opening a registry key: " + ex.Message);
}
try {
ScanSubKey(Registry.CurrentUser.OpenSubKey("SOFTWARE"));
}
catch (Exception ex) {
Debug.WriteLine("The following error occurred opening a registry key: " + ex.Message);
}
if (Is64BitOS)
{
try {
ScanSubKey(Registry.ClassesRoot.OpenSubKey("Wow6432Node"));
}
catch (Exception ex) {
Debug.WriteLine("The following error occurred opening a registry key: " + ex.Message);
}
try {
ScanSubKey(Registry.LocalMachine.OpenSubKey("SOFTWARE\\Wow6432Node"));
}
catch (Exception ex) {
Debug.WriteLine("The following error occurred opening a registry key: " + ex.Message);
}
try {
ScanSubKey(Registry.CurrentUser.OpenSubKey("SOFTWARE\\Wow6432Node"));
}
catch (Exception ex) {
Debug.WriteLine("The following error occurred opening a registry key: " + ex.Message);
}
}
【问题讨论】:
-
AFAIK 这是不可能的,请参阅here
标签: c# windows optimization registry try-catch