2012-01-12 41 views
0

我有一些正在被正確觸發的代碼,雖然它看起來並沒有真正做我期望它應該做的事情。異常不停止應用程序

我使用System.Text.RegularExpressions.Regex來測試正確格式化的方法參數,在我的測試中,我拋出的ArgumentException實際上並沒有停止應用程序。而且它也沒有嘗試/抓住它。

當我遍歷我的代碼時,看起來只要它碰到throw new ArgumentException行,就會跳轉到我的Form1_Activated事件處理程序,然後繼續執行其業務。

void MainForm_Load(object sender, System.EventArgs e) 
    { 
     SNSBackup.Backup(_saveLocation, _saveLocation + "\\Backups", "*.xml, *.recipex", 5, ArchiveType.Zip); 
    } 

public static void Backup(string source, string destination, string ext, int backupsToKeep, ArchiveType type) 
     { 
      // Test to see if the 'ext' parameter is in a valid format. 
      // Makes sure that the 
      Regex r = new Regex(@"^(\*\.\w+\s*\,?\s*)+$"); 

      if (!r.IsMatch(ext)) 
       throw new ArgumentException(); 
+0

您是否運行64位版本的Windows? – 2012-01-12 15:33:01

+0

您可能會在這裏找到您的答案:http://stackoverflow.com/questions/1409161/exceptions-ignored-in-form-load-for-x64 – 2012-01-12 15:36:51

回答

1

我相信這是WinForms中稱爲無聲異常的東西。基本上,您的應用程序將基本上吞下拋出未處理的異常(據我所知)。您可以更改某些設置以防止/處理它 - 請參閱thisthis相關問題。

注意:似乎在其他文章中提到,這是一個孤立於64位平臺的問題。我不確定這是否是這種情況。

+0

通過審查這些線程後,我決定嘗試使用ThreadException事件。雖然我很困惑,因爲有些人似乎暗示這樣做是一個壞主意,當別人說這是你能做的最好的事情。 – agent154 2012-01-12 16:11:31

+2

是的,這是一個64位平臺問題,與WinForms無關。最好解釋[這裏](http://stackoverflow.com/a/4934010/366904)。在這種情況下,最有意義的建議是重新考慮將代碼放置在「Load」事件中以開始。它可能不屬於那裏。 – 2012-01-13 00:13:12