【问题标题】:Ignore error and continue in C#忽略错误并在 C# 中继续
【发布时间】:2013-03-13 08:47:58
【问题描述】:
我正在尝试在 C# 中打开 3 个程序,但是,如果发生错误,我仍然希望代码继续运行。换句话说,如果程序 1 出现故障,程序 2 和 3 仍应尝试打开。我也不想检查文件存在,因为程序需要一些开关,任何事情都可能失败。
如果程序 1 失败,下面的代码将崩溃。如何忽略任何错误并继续执行代码?
try
{
string path = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
//Program 1
Process x = Process.Start("\"C:\\Program Files\\Company\\Office\\MyProgram1.EXE\" /runtime \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer");
//Program 2
Process x = Process.Start("\"C:\\Program Files\\Company\\Office\\MyProgram2.EXE\" /runtime \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer");
//Program 3
Process x = Process.Start("\"C:\\Program Files\\Company\\Office\\MyProgram3.EXE\" /runtime \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer");
}
catch {}
【问题讨论】:
标签:
c#
error-handling
try-catch
【解决方案1】:
为每个进程单独的Try...Catch 可能是最好的方法。但是,如果您可以拥有任意数量的程序,则可以使用 foreach 循环,而不是为每个调用手动编写 Try...Catch。
List<Action> processesToCall = new List<Action>();
string path = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
processesToCall.Add(() => Process.Start("\"C:\\Program Files\\Company\\Office\\MyProgram1.EXE\" /runtime \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer"));
processesToCall.Add(() => Process.Start("\"C:\\Program Files\\Company\\Office\\MyProgram2.EXE\" /runtime \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer") );
processesToCall.Add(() => Process.Start("\"C:\\Program Files\\Company\\Office\\MyProgram3.EXE\" /runtime \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer") );
foreach(Action a in processesToCall)
{
try
{
a();
}
catch
{
//log (or whatever you want to do with it)
}
}
这样您就不必为每个操作编写Try...Catch 块,因此更容易添加更多操作。
【解决方案2】:
您想忽略错误似乎很奇怪。无论如何,您可以将每个进程都放在一个 try catch 块中:
try{
Process.Start(...);
}catch(Exception e){
//log error, if you want
}
【解决方案3】:
使用 3 个不同的 try-catch 块
string path = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
try {
//Program 1
Process x = Process.Start(path + "/runtime \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer");
}
catch {}
try {
//Program 2
Process x = Process.Start(path + " /runtime \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer");
catch {}
try {
//Program 3
Process x = Process.Start(path + " /runtime \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer");
catch {}