2013-03-23 74 views
2

我试图打开C#3周的方案,但是,我还是想代码继续如果发生错误。换句话说,方案2和3仍然应该尝试,如果事情的程序1.我也不想检查文件实存未按程序需要一定的交换机和任何事情都有可能无法打开。下面
的代码将弹了出来,如果程序1失败。我如何忽略任何错误并继续执行代码?忽略错误并继续在C#

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 {} 

回答

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 {} 
0

似乎很奇怪,你要忽略错误。无论如何,你可以把每个进程开始在try catch块:

try{ 
    Process.Start(...);  
}catch(Exception e){ 
    //log error, if you want 
} 
10

单独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块,所以它更容易添加更多操作。