C # удобная обработка исключений для ленивых - PullRequest
0 голосов
/ 14 марта 2011

Есть ли какой-либо возможный способ автоматического добавления всех строк / и т. Д. В текстовое поле (или другую форму) по моему выбору? Прямо сейчас, чтобы сделать это в любом классе за пределами класса Main, я должен направить его в него и затем использовать класс Main для публикации.

Разъяснение (ИЗМЕНИТЬ): Я больше не хочу просто обрабатывать исключения. Я действительно просто хочу передать строку / текст из любой точки моей программы без необходимости передавать ее в MainWindow.

namespace MyProgram 
{
    public partial class MainWindow : Window
    {
        Main goes here...
    }

}

namespace People 
{
    public class Worker
    {
        public void printToLog()
        {
            textBoxErrorlog.AppendText("Message....");
        }
    } 
}

Код выше не будет работать. Я должен был бы вернуть строку в класс MainWindow и добавить ее оттуда (bc textBoxErrorlog не существует в Worker). Я хотел бы пропустить этот шаг и просто опубликовать его из класса Worker.

Ответы [ 3 ]

4 голосов
/ 14 марта 2011

Ваш вопрос довольно расплывчатый.Но у меня есть ощущение, что вы найдете эти события интересными / полезными:

Application.ThreadException
AppDomain.CurrentDomain.UnhandledException

РЕДАКТИРОВАТЬ после добавления вами кода:

Вообще говоря, ловить Exception плохо.В вашем случае я бы порекомендовал подключиться к AppDomain.CurrentDomain.UnhandledException и добавить в этот обработчик текстовое поле журнала исключений MainWindow.

    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
    void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        if (!e.IsTerminating)
        {
            MainWindow mw = GetRefToTheMainWindowSomehow();
            mw.AppendException(e.ExceptionObject);
        }
    }

А в MainWindow:

    internal delegate void AppendExceptionDelegate(Exception e);

    public void AppendException(Exception e)
    {
        if (this.InvokeRequired)
        {
            this.Invoke(new AppendExceptionDelegate(AppendException), new[] { e });
        }
        else
        {
            this._textBox.Text += e.Message;
        }
    }
1 голос
/ 14 марта 2011

Вы можете создать пользовательский аппендер для Log4Net и заставить его это сделать. Кроме этого вам нужно перехватить исключения и перенаправить их обратно в поток пользовательского интерфейса.

0 голосов
/ 14 марта 2011

Вы можете использовать подключение события UnhandledException от AppDomain и перенаправлять все необработанные исключения на все, что вам нравится.

AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += (sender, args) => { /* Write To Wherever */ };

IЯ бы рекомендовал конкретизировать это с использованием реального обработчика и т. д., но это дает вам представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...