C#方便懒惰的异常处理

时间:2011-03-14 17:08:43

标签: c# exception

有没有办法自动将所有字符串/ etc附加到我选择的文本框(或其他形式)?现在为了在Main类之外的任何类中执行此操作,我必须将其路由到它,然后使用Main类发布它。

澄清(CHANGED): 我不再希望只处理异常。我真的只想从我的程序中的任何地方传递字符串/文本,而不必将其传递给MainWindow。

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

}

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

上面的代码不起作用。我必须将字符串返回到MainWindow类并从那里追加它(在Worker中不存在bc textBoxErrorlog)。我想跳过这一步,只是从Worker类发布它。

3 个答案:

答案 0 :(得分:4)

你的问题很模糊。但我觉得你会发现这些活动很有趣/有用:

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 :(得分:1)

您可以为Log4Net创建自定义附加程序并让它执行此操作。除此之外,您需要捕获异常并将它们编组回UI线程。

答案 2 :(得分:0)

您可以利用UnhandledException中的AppDomain事件进行连接,并将所有未处理的异常路由到您喜欢的任何内容。

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

我建议尽量使用真正的处理程序等,但它会给你一个想法。