2013-03-23 73 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塊,所以它更容易添加更多操作。