有没有办法自动将所有字符串/ 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类发布它。
答案 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 */ };
我建议尽量使用真正的处理程序等,但它会给你一个想法。