我想趕上拋出異常,但它不起泡到它被稱爲。它打破了InsertNewUser
的catch塊,說異常不冒泡
‘類型的異常‘System.Exception的’發生在PeakPOS.exe但在用戶代碼中沒有處理’
如果我點擊調試器繼續,它進入一個名爲App.g.i.cs
的文件,並打破了一條我不明白的地方,但與break上的調試有關。應用程序在此之後終止。
爲什麼它在重新拋出然後重新捕獲和處理(待處理)時異常是未處理的?
AccessViewModel.cs
public void SaveNewUser(Popup popup)
{
UserAccounts.Add(TempUser);
string salt = PeakCrypto.GenerateSalt();
string hash = PeakCrypto.GenerateHashedPassword(Password + salt);
try
{
PeakDB.InsertNewUser(TempUser, salt, hash);
}
catch (Exception e)
{
//TODO notify user that new account could not be saved
}
CreateNewAccount();
if (popup != null)
popup.IsOpen = false;
}
PeakDB.cs
public static async void InsertNewUser(UserAccount user, String salt, String hash)
{
var db = await DatabaseHelper.GetDatabaseAsync();
try
{
using (var userStatement = await db.PrepareStatementAsync(
"INSERT INTO AccessAccounts (FirstName, LastName, Salt, Hash) VALUES(@first, @last, @salt, @hash)"))
{
userStatement.BindTextParameterWithName("@first", user.FirstName);
userStatement.BindTextParameterWithName("@last", user.LastName);
userStatement.BindTextParameterWithName("@salt", salt);
userStatement.BindTextParameterWithName("@hash", hash);
await userStatement.StepAsync();
}
}
catch(Exception e)
{
// TODO: log the exception error
throw;
}
}
App.g.i.cs
#if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
UnhandledException += (sender, e) =>
{
if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();
};
#endif
您是否嘗試取消選中「當此異常發生時中斷」並再次運行的複選框?我認爲,在調試模式下,它確實在例外情況下中斷 –
@Saagar:是的。會發生什麼呢,它會發送到App.g.i.cs文件,並像以前一樣中斷if語句,它不會再被中斷。我想知道我是否誤解了try/catch。捕捉到一個不處理它的異常? – ShrimpCrackers