В Visual Basic я написал только On Error Resume Next
в заголовке своей программы, и ошибки были подавлены во всем проекте.
Здесь, в C #, мне очень не хватает этой функции. Обычная try-catch
обработка каждой отдельной процедуры не только занимает очень -много времени, но и приводит к нежелательным эффектам. При обнаружении ошибки, даже если она обработана, код не продолжает с того места, где она произошла. В On Error Resume Next
код продолжался с места ошибки, пропуская только вызов функции, вызвавший ошибку.
Я еще не очень хорошо знаком с C #, но, возможно, в C #существует лучшая обработка ошибок, чем в примитиве try-catch
.
Я также хотел бы иметь имя модуля или функции, в котором произошла ошибка, а также номер строки в моем сообщении об ошибке. Насколько мне известно, класс Exception
не предоставляет таких функций. Какие-нибудь идеи (, реализованные, конечно, без использования каких-либо классов процессов в моем собственном приложении )?
Как вы справляетесь с ошибками в больших проектах? Надеюсь, мне не нужно добавлять try-catch
к каждому методу. Каким-то образом C #выдает много ошибок -, которые кажутся типичными для этого языка.
Мое решение, которое я нашел, чтобы повторно -решить несколько моих проблем:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[STAThread]
static void Main()
{
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); //setup global error handler
Application.Run(new Form1());
}
private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
MessageBox.Show("Unhandled exception: " + e.Exception.ToString()); //get all error information with line and procedure call
Environment.Exit(e.Exception.GetHashCode()); //return the error number to the system and exit the application
}
private void button1_Click(object sender, EventArgs e)
{
string s = ""; s.Substring(1, 5); //Produce an error
}
}