Вы можете сделать это с любым количеством параметров, например:
private void FireEventAppender_OnMessageLogged(object sender, MessageLoggedEventArgs e)
{
DisplayStatusUpdate(e.LoggingEvent.RenderedMessage);
}
private delegate void DisplayStatusUpdateDelegate(string text);
private void DisplayStatusUpdate(string text)
{
if(InvokeRequired)
this.Invoke(new DisplayStatusUpdateDelegate(DisplayStatusUpdate), text);
else
{
_StatusTextBox.Text = _StatusTextBox.Text + text;
_StatusTextBox.Text = String.Format("{0}\r\n", _StatusTextBox.Text);
_StatusTextBox.SelectionStart = _StatusTextBox.Text.Length - 1;
_StatusTextBox.ScrollToCaret();
}
}
Есть еще один метод, который я использовал в текущем проекте, который может значительно сократить код. Подробности здесь .
Если вы реализуете этот метод, вам потребуется:
Создание формы с использованием фабрики AOP:
Form f = AOPFactory.Create<Form1>();
Application.Run(f);
А затем вы просто украшаете обработчик событий атрибутом [RunInUIThread]. Он использует модель перехвата метода Касла для автоматического вызова при необходимости.
Таким образом, приведенный выше код становится:
private void FireEventAppender_OnMessageLogged(object sender, MessageLoggedEventArgs e)
{
_StatusTextBox.Text = _StatusTextBox.Text + text;
_StatusTextBox.Text = String.Format("{0}\r\n", _StatusTextBox.Text);
_StatusTextBox.SelectionStart = _StatusTextBox.Text.Length - 1;
_StatusTextBox.ScrollToCaret();
}
Производительность кажется сопоставимой, чуть медленнее, но в зависимости от того, что вы делаете, все может быть в порядке, определенно требуется меньше кода.