Bunları kullanabileceğiniz durumlar var, ancak çok seyrek olmalılar. Birini kullanabileceğim durumlar şunları içerir:
istisna günlüğü; bağlama bağlı olarak bunun yerine işlenmeyen bir istisna veya mesaj gönderilmesini isteyebilirsiniz.
oluşturma veya ses işleme veya bir liste kutusu geri çağırma gibi döngüsel teknik durumlar, davranışın kendisinin sorunu göstereceği, bir istisna atmanın sadece yoluna gireceği ve istisnanın kaydedilmesi muhtemelen 1000'lerin "XXX başarısız oldu" mesajlarıyla sonuçlanacaktır .
en azından bir şey kaydediyor olsalar da başarısız olamayacak programlar .
çoğu winforms uygulamaları için, her kullanıcı girişi için tek bir try deyimi olması yeterli bulduk. Aşağıdaki yöntemleri kullanıyorum: (AlertBox sadece hızlı bir MessageBox.Show sarmalayıcıdır)
public static bool TryAction(Action pAction)
{
try { pAction(); return true; }
catch (Exception exception)
{
LogException(exception);
return false;
}
}
public static bool TryActionQuietly(Action pAction)
{
try { pAction(); return true; }
catch(Exception exception)
{
LogExceptionQuietly(exception);
return false;
}
}
public static void LogException(Exception pException)
{
try
{
AlertBox(pException, true);
LogExceptionQuietly(pException);
}
catch { }
}
public static void LogExceptionQuietly(Exception pException)
{
try { Debug.WriteLine("Exception: {0}", pException.Message); } catch { }
}
Sonra her olay işleyicisi şöyle bir şey yapabilir:
private void mCloseToolStripMenuItem_Click(object pSender, EventArgs pEventArgs)
{
EditorDefines.TryAction(Dispose);
}
veya
private void MainForm_Paint(object pSender, PaintEventArgs pEventArgs)
{
EditorDefines.TryActionQuietly(() => Render(pEventArgs));
}
Teorik olarak, istisnaların sonsuz miktarda mesaj üretmemesi için çağrıları yapmak için daha iyi olabilecek TryActionSilently öğesine sahip olabilirsiniz.