I need to create a class with two properties:
These properties (Actions <>) send a message or an exception depending on the target function. This objective function is set using properties.
I currently have this functional code:
public class Output { private Action<string> logOutput; private Action<Exception, string> exceptionOutput; public Action<string> LogOutput { set { this.logOutput = value; } get { return this.logOutput; } } public Action<Exception, string> ExceptionOutput { set { this.exceptionOutput = value; } get { return this.exceptionOutput; } } public Output() : this(null, null) { } public Output(Action<string> logAction, Action<Exception, string> exceptionAction) { this.logOutput = logAction; this.exceptionOutput = exceptionAction; } public void WriteLogMessage(string format, params object[] args) { if (this.logOutput != null) logOutput(string.Format(format, args)); } public void WriteExceptionMessage(Exception ex, string format, params object[] args) { if (this.exceptionOutput != null) exceptionOutput(ex, string.Format(format, args)); } }
And this is my form code:
private void MainForm_Load(object sender, EventArgs e) { // my Output object Output myOutput = new Output(); // set properties myOutput.ExceptionOutput = this.WriteExceptionMessageToTextBox; myOutput.LogOutput = this.WriteLogMessageToTextBox; // test myOutput.WriteLogMessage("this is my log message to text box"); myOutput.WriteExceptionMessage(new Exception("this is my exception"), "this is my exception message to text box"); } private void WriteLogMessageToTextBox(string message) { // nothing to do here if (this.txtBox.IsDisposed) return; if (this.InvokeRequired) { BeginInvoke(new MethodInvoker(delegate() { WriteLogMessageToTextBox(message); })); } else { // write to text box this.txtBox.AppendText(message + Environment.NewLine); } } private void WriteExceptionMessageToTextBox(Exception ex, string message) { // nothing to do here if (this.txtBox.IsDisposed) return; if (this.InvokeRequired) { BeginInvoke(new MethodInvoker(delegate() { WriteExceptionMessageToTextBox(ex, message); })); } else { string msg = ""; msg += string.Format("Program:{0}", message); msg += string.Format("Message{0}", ex.Message); msg += string.Format("StackTrace:{0}", ex.StackTrace); msg += string.Format("Source:{0}", ex.Source); // write to text box this.txtBox.AppendText(msg + Environment.NewLine); } }
Is this model right? Is there any other way to do this?
source share