【问题标题】: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 {}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-12
          • 1970-01-01
          • 1970-01-01
          • 2015-05-12
          • 1970-01-01
          • 2011-12-01
          相关资源
          最近更新 更多