В моей текущей ситуации у меня есть класс, который выполняет операцию синхронно.Во время этой операции определенное событие будет выдано несколько раз, в зависимости от того, как часто возникает ситуация, когда возникает событие.
Я знаю, как работает механизм событий и каковы рекомендуемые способы использования.Работает хорошо. (Примечание: мое приложение однопоточное)
Я хочу установить значение для свойства в моих EventArgs.У меня никогда не было необходимости устанавливать свойства там.
Это упрощенная ситуация моей текущей ситуации: (Обратите внимание, мне не нужны ответы, говорящие мне, чтобы использовать регулярное выражение или stringreplace, потому что это выиграло 'в этой ситуации не работает)
У меня есть EventArgs:
public class TestEventArgs : EventArgs
{
public String OldString { get; private set; }
public String NewString { get; set; }
public TestEventArgs(String oldString)
{
this.OldString = oldString;
}
}
Обычно я вызываю события следующим образом:
public event EventHandler<TestEventArgs> ChangeString;
protected virtual void OnChangeString(String oldString)
{
EventHandler<TestEventArgs> handler = this.ChangeString;
if (handler != null)
{
handler(this, new TestEventArgs(oldString));
}
}
и вызывая метод OnChangeString,потому что я прочитал это таким образом, чтобы вызывать события давным-давно.
Модифицированный код, в котором мне нужно значение EventArgs после его поднятия:
public event EventHandler<TestEventArgs> ChangeString;
protected virtual void OnChangeString(TestEventArgs args)
{
EventHandler<TestEventArgs> handler = this.ChangeString;
if (handler != null)
{
handler(this, args);
}
}
public void Foo()
{
String oldString = "this is the old string";
// this.OnChangeString(oldString) // this is the way I called before
// now I need to keep a reference to the EventArgs
TestEventArgs args = new TestEventArgs(oldString);
this.OnChangeString(args);
// here I do have full access to args.NewString
}
Итак, действительно ли этохорошо, чтобы сохранить ссылку на EventArgs и вызвать событие с помощью метода, который принимает мои EventArgs в качестве параметра?