У нас есть этот общий сценарий, в котором у нас есть метод, который выполняет какое-то действие асинхронно и вызывает событие, когда оно выполняется.
Иногда мы хотим сделать это синхронно, поэтому у нас есть код, похожий на этот:
ManualResetEvent reset = new ManualResetEvent(false);
someobject.AsyncActionDone += (sender, args) => reset.Set();
someobject.PerformAsyncAction();
reset.WaitOne();
Есть ли способ написать вспомогательный метод для этого? Я могу пройти в Action для выполнения, но я не уверен, как передать что-то, что позволяет вспомогательному методу знать, какое событие прослушивать, поскольку не похоже, что вы можете передать EventHandler в качестве параметра.
Предпочтительно решение, которое не требует отражения
Кажется, что возникает некоторая путаница, это пример того, что такое некоторый класс:
public class SomeClass
{
private ExternalServer someServerOverTheNetwork = new ExternalServer();
public event EventHandler AsyncActionDone;
public Data SomeData { get; set; }
public void PerformAsyncAction()
{
someServerOverTheNetwork.GetSomeData(OnDataRetrived);
}
public Data OnDataRetrived(Data someData)
{
AsyncActionDone(this, new DataEventArgs(someData));
}
}